2009-06-16 47 views
10

Tôi đang tìm cách tạo ứng dụng mô phỏng một công cụ vật lý. Tôi đã có mẫu âm thanh nhưng tôi muốn có thể tăng cường độ cao/tần số để tôi không phải tải quá nhiều tệp.Âm thanh trên iPhone

Bất kỳ ý tưởng nào API âm thanh sẽ có thể thực hiện việc này? Tôi cho rằng OpenAL hoặc Audio Queue Services nhưng không chắc chắn nó phù hợp. Bất kỳ liên kết đến hướng dẫn/mã mẫu cũng được nhiều đánh giá cao.

Xin cảm ơn trước.

Trả lời

19

Tôi đã đi xuống con đường này trong năm 2009, thử Bộ công cụ âm thanh, Dịch vụ âm thanh hàng đợi, mở và cuối cùng giải quyết trên AudioOit từ xa.

Hộp công cụ âm thanh là tốt cho hiệu ứng âm thanh được kích hoạt cơ bản, nhưng không thể thay đổi tần số hoặc mẫu vòng lặp.

Dịch vụ xếp hàng âm thanh có thể lặp mẫu, nhưng cách duy nhất tôi có thể tìm thấy để điều chỉnh tần suất phát lại của mẫu là đọc lại dữ liệu từ tệp - rất đau. Ngoài ra, khung công tác rất cồng kềnh - tôi chỉ sử dụng nó nếu tôi đang cố gắng phát trực tuyến nội dung nào đó trên Internet.

OpenAL là một trò chơi thần thánh - đã hoạt động với nó trong chưa đầy một giờ sau khi nhận được ứng dụng mẫu iPhone "CrashLanding" không có sẵn của Apple. Tôi thấy OpenAL là lý tưởng cho các trò chơi hoặc thậm chí một nhạc cụ - các mẫu có thể được tải sẵn, điều chỉnh tần số rất dễ dàng và việc lặp lại không thành vấn đề. Người chia bài đối với tôi là bắt đầu và dừng một mẫu lặp lặp sẽ dẫn đến "cửa sổ bật lên" khó chịu gần như mọi lúc. Ngoài ra, bộ trộn âm thanh theo vị trí 3d được xây dựng là một chút quá nhiều CPU theo ý thích của tôi.

Nếu công cụ của bạn không sử dụng mẫu lặp, tôi khuyên bạn nên thử tuyến đường OpenAL trước tiên - đường cong học tập ít đáng sợ hơn nhiều. Cố gắng theo dõi xuống "SoundEngine.h", "CrashLanding" hoặc "TouchFighter", hoặc kiểm tra các liên kết sau đây:

http://benbritten.com/blog/2008/11/06/openal-sound-on-the-iphone/

Kể từ khi mẫu lặp được một yêu cầu đối với tôi, tôi cuối cùng đã giải quyết trên AudioUnits (mà , trên iPhone, được gọi là "RemoteIO" nếu bạn muốn thực hiện đầu vào hoặc đầu ra). Nó rất khó thực hiện - rất giống với Audio Queue Services, trong đó cốt lõi của việc thực hiện của bạn sẽ nằm bên trong "buffer callback", được gọi vài lần mỗi giây để lấp đầy bộ đệm của âm thanh đi với giá trị SInt16 thô.

Cuối cùng, tôi nhận được công cụ của mình hoạt động tốt với đa âm sắc đa giác, mẫu lặp, không popping và độ trễ tối thiểu.

Thật không may, RemoteIO không được ghi lại tài liệu.Michael Tyson là một trong những người đầu tiên trong lĩnh vực này để viết về RemoteIO tại chiều dài, và bài viết của ông (và các ý kiến) rất hữu ích với tôi:

http://michael.tyson.id.au/2008/11/04/using-remoteio-audio-unit/

Chúc may mắn!

Đã chỉnh sửa năm sau: Tôi đã mở mã nguồn RemoteIO/AudioUnits mà tôi đã đề cập ở trên: https://github.com/glenn-barnett/hexaphone/blob/master/Classes/Instrument.m - xin lỗi vì sự lộn xộn, tôi hy vọng sẽ có thời gian để làm sạch mã và nhận xét.

+0

Cảm ơn mẹo. Tôi đang thử OpenAL với mã mẫu oalTouch vào lúc này nhưng tôi không thể tìm thấy cài đặt để thay đổi độ cao hoặc tần số khi đang di chuyển. Bất kỳ mẹo nào đúng hướng đều được đánh giá cao! – Matthew

+0

Nevermind. Tôi đã tìm ra cách điều chỉnh độ cao. Mã mẫu cho oalTouch chỉ quản lý một tệp âm thanh, vì vậy tôi đoán tôi cần xem xét soundManager sau. – Matthew

+0

THe soundEng mã hoạt động thực sự tốt trên iPhone OS 2.21 SDK nhưng không thể biên dịch trên 3.0 của SDK. Bất kỳ ý tưởng nếu có một phiên bản mới ra khỏi đó? – Matthew

0

Nghe có vẻ hơi giống như bạn đang tạo ra phương pháp tổng hợp không thể xóa được khi phát tệp MIDI. Bạn có thể tìm thấy một bộ tổng hợp MIDI cho iPhone mà bạn có thể sử dụng, và sau đó sử dụng các mẫu âm thanh của bạn để xây dựng một bộ không thể xóa được. Bất cứ lúc nào bạn muốn chơi nhạc chuông, bạn sẽ chỉ cần gửi sự kiện MIDI vào bộ tổng hợp MIDI của iPhone với tập hợp không thể tải được của bạn.

+0

Để được kích thích kỹ thuật (tôi là một nerd synth), nó có vẻ giống như một công cụ lấy mẫu đơn giản hơn tổng hợp có thể wavetable. Tôi đã làm cả hai. http://en.wikipedia.org/wiki/Wavetable_synthesis – Nosredna

+0

Tôi không phải là một nerd synth, và tôi có rất ít kinh nghiệm với lập trình âm thanh; Tôi đơn giản viết câu trả lời vì tôi nghĩ tôi đã thấy sự giống nhau từ kiến ​​thức máy tính chung của tôi, và không có câu trả lời nào được đăng vào thời điểm tôi viết, vì vậy tôi nghĩ tôi sẽ bỏ ra hai xu. Tôi vui mừng những người có nhiều kinh nghiệm hơn trong lĩnh vực này hơn là tôi đang đăng câu trả lời tốt hơn :) –

+0

Tôi đã không bỏ phiếu cho bạn hoặc bất cứ điều gì, chỉ mong muốn chỉ ra làm thế nào tuyệt vời wavetable synths được. :-) – Nosredna

1

Thử tạo đơn vị âm thanh. Tôi đang làm một cái gì đó tương tự như một AU làm việc tốt cho tôi. Ban đầu tôi đã sử dụng hàng đợi âm thanh vì nó đơn giản hơn (cấp cao hơn?) Và đồng bộ, tuy nhiên nó thiếu sự phản hồi, vì vậy tôi đã bán nó cho Thiết bị âm thanh.

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