2009-02-20 11 views
14

Sto creando un'app di registrazione iPhone che deve inviare il file audio come .wav a un server esterno.Registrazione audio come WAV su iphone

Partendo dall'esempio SpeakHere, sono in grado di registrare l'audio in un file, ma solo come .caf

Qualcuno sa come registrare come un wav, invece? O come convertire da .caf a .wav sull'iPhone? (La conversione deve avvenire al telefono)

EDIT:

Mi chiedo se qualcosa può essere fatto con l'utilizzo di kAudioFileWAVEType invece di kAudioFileCAFType in AudioFileCreateWithURL

risposta

19

Yup, la chiave è kAudioFileWAVEType

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

Cambiare a WAVE dal CAF nell'esempio SpeakHere fa sì che il registrando per essere come wav. Ho anche modificato la stessa cosa nella classe di riproduzione e ho cambiato il nome del file in Recording.wav

+0

Stai attento. AVAudioFileTypeKey con kAudioFileWAVEType è disponibile solo su iOS 11.0 o successivi – CFIFok

2

Date un'occhiata al libsndfile. È una libreria C ben utilizzata (compresa da Audacity) per lavorare con molti formati di file. Supporta la lettura e la scrittura di una varietà di formati CAF e WAV.

CAF File structure e WAV format sono abbastanza simili. Se il peggio arriva al peggio, la conversione non dovrebbe essere troppo difficile.

comporterebbe prendendo il blocco di dati audio, e la copia come è nel file WAV, e utilizzando le informazioni nella descrizione audio Chunk per aggiungere un equivalente fmt subchunk per il file WAV. È una copia di byte abbastanza semplice.

Tuttavia, essere consapevoli (come Eric ha sottolineato) non ci sono problemi di licenza, vedi: Can the Libsndfile library be used on the iPhone iOS?

+1

Grazie. Ho usato il collegamento in formato WAV per confermare che la registrazione stava funzionando. Stavo riscontrando un problema nell'invio dei dati al mio server. – matt

+1

Ho votato perché il libsndfile non può essere utilizzato su iPhone: http://stackoverflow.com/questions/4939268/can-the-libsndfile-library-be-used-on-the-iphone-ios –

+0

Grazie per il commento. Puoi ancora usarlo collegando staticamente il tuo codice (o almeno la risposta che hai citato dice così), ma questo è sicuramente degno di nota nella risposta qui. Lo aggiungerò –