2010-03-28 29 views
6

Tôi muốn tạo một wave âm thanh theo lập trình và phát nó bằng AVAudioPlayer. Tôi có mã để mã hóa dạng sóng của tôi như PCM tuyến tính, 44100Hz, mono, 8 bit cho mỗi mẫu.Tạo bộ đệm LPCM trong bộ nhớ cho AVAudioPlayer initWithData

Tôi không rõ loại phong bì nào tôi cần để quấn quanh bộ đệm này để AVAudioPlayer nhận ra nó là PCM.

Trả lời

4

Có thể thêm WAV header sẽ giúp ích?

+0

Tôi tự hỏi, nếu điều này là nói từ kinh nghiệm hoặc đầu cơ. – iter

+0

Tôi không thử, nhưng nó phải hoạt động. – zoul

+0

Cảm ơn bạn đã làm rõ. Tôi đang suy nghĩ ít hơn dọc theo dòng cán bộ mã hóa WAV của riêng tôi và nhiều hơn nữa dọc theo dòng sử dụng AudioToolbox để làm việc nâng cho tôi. – iter

4

PCM chỉ là đại diện kỹ thuật số của tín hiệu âm thanh analog. Thật không may, nó không gói gọn bất kỳ siêu dữ liệu nào về các kênh âm thanh, độ sâu bit hoặc tỷ lệ mẫu - tất cả đều cần thiết để đọc chính xác dữ liệu PCM đã nói. Tôi cho rằng AVAudioPlayer sẽ chấp nhận dữ liệu PCM này được bao bọc trong một đối tượng NSData miễn là bạn có thể thiết lập các biến đó theo cách thủ công trong đối tượng AVAudioPlayer. Thật không may, những biến này chỉ đọc, vì vậy mặc dù tài liệu nói rằng AVAudioPlayer có thể xử lý bất kỳ thứ gì mà Core Audio có thể xử lý, nó không có cách nào để xử lý dữ liệu LPCM thô.

Như đã nói bởi zoul, tôi sẽ tưởng tượng cách dễ nhất để thực hiện điều này là ném vào tiêu đề WAV, vì tiêu đề thông báo cho AVPlayer về các biến cần thiết ở trên. Đó là 44 byte, có thể dễ dàng giả lập, và được định nghĩa độc đáo - Tôi đã sử dụng cùng một definition được đưa ra ở trên để thực hiện mã hóa tiêu đề wav và giải mã. Ngoài ra, nó chỉ được thêm vào dữ liệu LPCM chưa sửa đổi của bạn LPCM.

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