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:
- gì là 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?