2009-02-20 8 views
14

Ich mache eine iPhone-Aufnahme-App, die die Sound-Datei als. WAV an einen externen Server senden muss.Aufnahme Sound als WAV auf iPhone

Ausgehend von dem SpeakHere Beispiel, ich bin in der Lage Sound als Datei aufzeichnen, sondern nur als .caf

Wer weiß, wie es als wav statt aufzeichnen? Oder wie konvertiert man von .caf zu .wav auf dem iPhone? (Die Umwandlung am Telefon geschehen muss)

EDIT:

Ich frage mich, wenn etwas mit der Verwendung von kAudioFileWAVEType statt kAudioFileCAFType in AudioFileCreateWithURL

Antwort

19

Yup, ist der Schlüssel kAudioFileWAVEType

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

Wechsel von CAF WAVE in dem SpeakHere Beispiel der Ursachen Aufnahme als wav sein. Ich bearbeite auch das Gleiche in der Wiedergabeklasse und ändere den Dateinamen auf Recording.wav

+0

Seien Sie vorsichtig. AVAudioFileTypeKey mit kAudioFileWAVEType ist nur für iOS 11.0 oder neuer verfügbar – CFIFok

2

Werfen Sie einen Blick auf libsndfile getan werden kann. Es ist eine gut verwendete (einschließlich von Audacity) C-Bibliothek für das Arbeiten mit vielen Dateiformaten. Es unterstützt das Lesen und Schreiben einer Vielzahl von CAF- und WAV-Formaten.

Die CAF File structure und WAV format sind ziemlich ähnlich. Im schlimmsten Fall sollte Converting nicht zu hart sein.

Es würde beinhalten, den Audiodatenblock zu nehmen und in die WAV-Datei zu kopieren, und die Informationen in dem Audio Description Chunk zu verwenden, um ein äquivalentes fmt Subchunk für die WAV-Datei hinzuzufügen. Es ist ziemlich einfaches Byte-Kopieren.

, jedoch bewusst sein, da (wie Eric wies darauf hin) ist zur Lizenzierung finden: Can the Libsndfile library be used on the iPhone iOS?

+1

Danke. Ich habe den Link im WAV-Format verwendet, um zu bestätigen, dass die Aufzeichnung funktioniert hat. Ich hatte ein Problem beim Senden von Daten an meinen Server. – matt

+1

Ich habe dies abgelehnt, weil die libsndfile nicht auf dem iPhone verwendet werden kann: http://stackoverflow.com/questions/4939268/can-the-libsndfile-library-be-used-on-the-iphone-ios –

+0

Danke für den Kommentar. Sie können es immer noch benutzen, indem Sie es statisch in Ihren Code einbinden (oder zumindest die Antwort, die Sie erwähnen), aber das ist definitiv erwähnenswert in der Antwort hier. Ich werde es hinzufügen –