2012-01-31 22 views
6

Trong tài liệu iOS 5.0 nó được tuyên bố rằng các kinh điển kiểu dữ liệu âm thanh 16 bit ký int (link) là gì:các kinh điển âm thanh kiểu dữ liệu mẫu trong iOS 5

Các kinh điển âm thanh kiểu mẫu dữ liệu cho đầu vào và đầu ra.

typedef SInt16 AudioSampleType;

Thảo luận

Các kinh điển kiểu mẫu âm thanh cho đầu vào và đầu ra trong iPhone OS là PCM tuyến tính với mẫu số nguyên 16-bit.

Tuy nhiên nếu tôi bấm chuột phải "nhảy vào định nghĩa" trên AudioSampleType tôi thấy định nghĩa sau đây, trong CoreAudioTypes.h:

#if !CA_PREFER_FIXED_POINT 
typedef Float32  AudioSampleType; 
typedef Float32  AudioUnitSampleType; 
#else 
typedef SInt16  AudioSampleType; 
typedef SInt32  AudioUnitSampleType; 
#define kAudioUnitSampleFractionBits 24 
#endif 

và một lần nữa khi nhảy-to-def cho CA_PREFER_FIXED_POINT tôi thấy:

#if !defined(CA_PREFER_FIXED_POINT) 
    #if TARGET_OS_IPHONE 
     #if (TARGET_CPU_X86 || TARGET_CPU_X86_64 || TARGET_CPU_PPC || TARGET_CPU_PPC64) && !TARGET_IPHONE_SIMULATOR 
      #define CA_PREFER_FIXED_POINT 0 
     #else 
      #define CA_PREFER_FIXED_POINT 1 
     #endif 
    #else 
     #define CA_PREFER_FIXED_POINT 0 
    #endif 
#endif 

Kiểm tra mã của tôi tại thời gian chạy, tôi thấy rằng CA_PREFER_FIXED_POINT được định nghĩa là 1, cả trên trình mô phỏng và trên iPod của tôi.

Vì vậy, câu hỏi của tôi:

  • loại kinh điển? Có phải luôn làSInt16 trên thiết bị?
  • Trong trường hợp nào dòng thứ 3 ở trên đánh giá là 'true'? Ý tôi là, thiết bị nào chạy hệ điều hành iPhone và sử dụng một trong các CPU được liệt kê?
  • Có trường hợp sử dụng nào mà tôi nên xác định lại CA_PREFER_FIXED_POINT đến 0 (khi lập trình cho iPhone) không?

Trả lời

7

Đọc nội dung của liên kết, và dòng này trong tiêu đề của bạn một lần nữa:

#define kAudioUnitSampleFractionBits 24 

Các loại kinh điển cho âm thanh đầu vào đầu ra tương đương với SInt16.

Loại kinh điển để xử lý âm thanh khác, chẳng hạn như Bộ xử lý âm thanh bộ lọc iOS 5 mới, là 8.24 điểm cố định đã ký.

Nếu bạn làm mã DSP của riêng bạn để xử lý âm thanh iOS gần thời gian thực, hãy đánh giá nó bằng các loại khác nhau, như trên một số lõi ARM mới nhất, chuỗi các bit 32 bit thường nhanh hơn sử dụng một trong hai trên các loại kinh điển, và được mã hóa trong mã NEON NEM thậm chí nhanh hơn.

3

Trong Core Audio Essentials của Apple nó làm rõ về định dạng dữ liệu Canonical âm thanh:

định dạng dữ liệu âm thanh Canonical Tùy thuộc vào nền tảng này, Core Audio có một hoặc hai “kinh điển” định dạng dữ liệu âm thanh theo nghĩa là những định dạng có thể là:

  • bắt buộc như một dạng trung gian trong chuyển đổi
  • Định dạng f hoặc có một dịch vụ trong Core Audio được tối ưu hóa
  • Một mặc định, hoặc đã thừa nhận, định dạng, khi bạn không có thoả định một ASBD

Các định dạng kinh điển trong Core Audio như sau:

  • Đầu vào và đầu ra iOS Tuyến tính PCM với các mẫu số nguyên 16 bit
  • Đơn vị âm thanh iOS và xử lý âm thanh khác PCM tuyến tính không liên tục với các mẫu điểm cố định 8.24 bit
  • Đầu vào và đầu ra Mac PCM tuyến tính với mẫu dấu chấm động 32-bit
  • đơn vị âm thanh máy Mac và xử lý âm thanh Noninterleaved PCM tuyến tính khác với 32-bit mẫu điểm nổi

Nhưng: Nếu bạn có một cái nhìn vào CoreAudioTypes.h trong iOS 8, bạn sẽ tìm thấy một cuộc thảo luận về điều đó:

Cờ "chuẩn" không còn được dùng nữa. CA_PREFER_FIXED_POINT là không khuyến khích vì hiệu suất dấu phẩy động trên iOS là như vậy mà điểm cố định không còn thực sự được ưu tiên. Tất cả các thiết bị do Apple cung cấp AudioUnits hỗ trợ dấu phẩy động. Thay thế nên được thực hiện với cân nhắc kỹ lưỡng của các định dạng được chỉ định hoặc mong đợi, nhưng thường kAudioFormatFlagsCanonical có thể được thay thế bằng kAudioFormatFlagsNativeFloatPacked, và kAudioFormatFlagsAudioUnitCanonical với kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved.

Các vấn đề liên quan