2009-02-20 14 views
14

Tôi đang tạo một ứng dụng ghi âm iPhone cần gửi tệp âm thanh dưới dạng .wav đến máy chủ bên ngoài.Ghi âm như WAV trên iphone

Bắt đầu từ ví dụ SpeakHere, tôi có thể ghi lại âm thanh như một tập tin, nhưng chỉ như .caf

Có ai biết làm thế nào để ghi lại nó như là một wav để thay thế? Hoặc làm thế nào để chuyển đổi từ .caf sang .wav trên iphone? (Việc chuyển đổi phải xảy ra trên điện thoại)

EDIT:

Tôi tự hỏi nếu bất cứ điều gì có thể được thực hiện với việc sử dụng kAudioFileWAVEType thay vì kAudioFileCAFType trong AudioFileCreateWithURL

Trả lời

19

Yup, chính là kAudioFileWAVEType

AudioFileCreateWithURL (
      audioFileURL, 
      kAudioFileWAVEType, 
      &audioFormat, 
      kAudioFileFlags_EraseFile, 
      &audioFileID 
     ); 

Thay đổi WAVE từ CAF trong ví dụ SpeakHere gây ra ghi là wav. Tôi cũng chỉnh sửa cùng một thứ trong lớp phát lại và thay đổi tên tệp thành Recording.wav

+0

Hãy cẩn thận. AVAudioFileTypeKey với kAudioFileWAVEType chỉ khả dụng trên iOS 11.0 trở lên – CFIFok

2

Có một cái nhìn tại libsndfile. Nó là một thư viện C được sử dụng tốt (bao gồm cả Audacity) để làm việc với nhiều định dạng tệp. Nó hỗ trợ đọc và ghi một loạt các định dạng CAF và WAV.

CAF File structureWAV format tương đối giống nhau. Nếu điều tồi tệ nhất đến tồi tệ nhất, việc chuyển đổi không quá khó.

Nó sẽ liên quan đến việc lấy dữ liệu âm thanh và sao chép vào tệp WAV và sử dụng thông tin trong phần Mô tả âm thanh để thêm một phần phụ tương đương fmt cho tệp WAV. Nó khá đơn giản là sao chép byte.

Tuy nhiên, phải nhận thức (như Eric chỉ ra) có những vấn đề cấp phép, xem: Can the Libsndfile library be used on the iPhone iOS?

+1

Cảm ơn. Tôi đã sử dụng liên kết định dạng WAV để xác nhận rằng bản ghi đang hoạt động. Tôi đã gặp sự cố khi gửi dữ liệu đến máy chủ của mình. – matt

+1

Tôi đã bỏ phiếu này vì không thể sử dụng libsndfile trên iPhone: http://stackoverflow.com/questions/4939268/can-the-libsndfile-library-be-used-on-the-iphone-ios –

+0

Cảm ơn cho nhận xét. Bạn vẫn có thể sử dụng nó bằng cách liên kết tĩnh vào mã của bạn (hoặc ít nhất là câu trả lời bạn đề cập nói như vậy), nhưng điều đó chắc chắn đáng nói đến trong câu trả lời ở đây. Tôi sẽ thêm nó –