2009-03-10 44 views
7

Tôi hiện đã có âm thanh đầu ra của tôi trên thiết lập iPhone như thế này:Native iPhone định dạng âm thanh

AudioStreamBasicDescription audioFormat; 

audioFormat.mSampleRate = 48000; 

audioFormat.mFormatID = kAudioFormatLinearPCM; 

audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 

audioFormat.mFramesPerPacket = 1; 

audioFormat.mChannelsPerFrame = 2; 

audioFormat.mBitsPerChannel = 16; 

audioFormat.mBytesPerPacket = 4; 

audioFormat.mBytesPerFrame = 4; 

Tuy nhiên, khi tôi kiểm tra số liệu hiệu suất của mình thông qua cá mập Tôi nhìn thấy các chức năng như: SRC_Convert_table_i32_scalar_stereo

mất một khoảng thời gian hợp lý.

Điều này khiến tôi nghĩ - định dạng đầu ra lý tưởng và được đề xuất cho iPhone là gì? Một trong những yêu cầu ít công việc cho thiết bị để chơi.

+0

thế nào bạn đang sử dụng Shark với iPhone? Bạn có chắc là bạn không lược tả giả lập không? RF –

+0

Không, tôi đang định cấu hình thiết bị. Đây là trang cho bạn biết cách thiết lập cá mập cho hồ sơ iPhone: https://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/SharkUserGuide/SelectingExecutiontoSampleorTrace/chapter_6_section_9.html –

Trả lời

11

Cá mập hoạt động với iPhone. Bạn có thể bật tính năng định cấu hình iPhone bằng cách chọn "Lấy mẫu> Mạng/Hồ sơ iPhone ..." trong menu.

Chắc chắn thử sử dụng tốc độ lấy mẫu 44100 Hz. Với 48000 Tôi thấy chức năng tương tự mà bạn đăng xuất hiện trong callstacks - không có chức năng như vậy xuất hiện khi sử dụng 44100. Các định dạng âm thanh kinh điển cho đơn vị âm thanh trên iPhone là không xen kẽ 8,24 PCM tuyến tính:

streamFormat.mFormatID   = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags  = 
        kAudioFormatFlagIsSignedInteger 
       | kAudioFormatFlagsNativeEndian 
       | kLinearPCMFormatFlagIsNonInterleaved 
       | (24 << kLinearPCMFormatFlagsSampleFractionShift); 
streamFormat.mSampleRate  = mixing_rate; 
streamFormat.mBitsPerChannel = 32; 
streamFormat.mChannelsPerFrame = 2; 
streamFormat.mFramesPerPacket = 1; 
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel/8); 
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame * 
           streamFormat.mFramesPerPacket; 
3

Từ iphone dev centre (yêu cầu đăng nhập) codec phần cứng suppoorted là

Codec Phần cứng iPhone âm thanh

ứng dụng hệ điều hành iPhone có thể sử dụng rộng loạt các định dạng dữ liệu âm thanh, như được mô tả trong phần tiếp theo. Một số các định dạng sử dụng mã hóa và giải mã dựa trên phần mềm . Bạn có thể đồng thời phát nhiều âm thanh ở các định dạng này. Ngoài ra, ứng dụng và ứng dụng của bạn (đáng chú ý là ứng dụng iPod ) có thể phát đồng thời các âm thanh ở các định dạng này.

Các định dạng âm thanh hệ điều hành iPhone khác sử dụng codec phần cứng để phát lại. Những định dạng là:

  • AAC
  • ALAC (Apple Lossless)
  • MP3
+0

Tôi ít quan tâm đến các định dạng khác nhau mà iphone có thể chơi, nhiều định dạng cơ sở hơn của đầu ra là gì. Bằng cách đó tôi có thể phù hợp với loại đầu ra của tôi, và nó sẽ yêu cầu ít chu kỳ cho iPhone để chuyển đổi. –

+1

Tôi đã giả định rằng bằng cách sử dụng một codec phần cứng bạn sẽ sử dụng ít chu kỳ CPU ... Tôi có thể sai, hãy thử và cho chúng tôi biết nó đi như thế nào – hhafez

1

48000 là một định dạng lạ cho âm thanh nói chung. Trong khi đó là nhẹ (và không thể nhận thấy) tốt hơn so với tiêu chuẩn CD 44.1Khz nó không có giá trị kích thước.

Có lý do thuyết phục nào trong ứng dụng của bạn để sử dụng âm thanh nổi chất lượng cao không? Nói cách khác là ứng dụng có khả năng được phát trên loa hoặc tai nghe tốt?

Định dạng PC tuyến tính là phần cứng gốc nên nó phải tối ưu. (Không giải nén để fiddle với.) Vì vậy, cuộc gọi đó có thể là một downsample để 44.1Khz.

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