

サーバーからソケット通信で受け取った800バイトの音源データ（PCM8bit8khz）を再生したいのですが、現在解決に至っておりません。  
AVAudioPlayerのinitWithdataを使えば良いのではと思い以下のコードを動かしてみたのですが、

[code]

    //関数の呼び出しaudioDataは受け取ったデータ
    [self prepareAudio:audioData];
    
    〜
    
    
    //デリゲートメソッドなど
    -(void)prepareAudio:(NSData*)data
    {
    
        self.player.delegate = self;
        NSError *error = nil;
    
        player = [[AVAudioPlayer alloc] initWithData:data fileTypeHint:AVFileTypeCoreAudioFormat error:&error];
    
        if ( error != nil )
        {
            NSLog(@"Error %@", [error localizedDescription]);
        }
        [self.player prepareToPlay];
    
    
    }
    
    #pragma mark - AVAudioPlayerDelegate
    -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    {
        if ( flag )
        {
            NSLog(@"Done");
    //        [self.playButton setTitle:@"Start" forState:UIControlStateNormal];
    
            // Can start next audio?
        }
    }
    
[/code]

**Error 操作を完了できませんでした。（OSStatus エラー 1954115647。）**

と表示されてします。（どうやらAVAudioで読み込めない形式というエラー？）  
AVFileTypeCoreAudioFormatをいろいろ変更してもだめでした。

Androidでは以下のコードで動いているため、

[code]

    bufSize = AudioTrack.getMinBufferSize(
            8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT);
    audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            8000,  //[Hz]
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_8BIT, //[bit]
            bufSize, //[byte]
            AudioTrack.MODE_STREAM);
    audioTrack.play();
    
    〜〜〜
    
    // soundByteが音声データ
    audioTrack.write(soundByte, 0, soundByte.length);
    
[/code]

こちら側で変換してやる必要があると思い、Core Audioを用いた変換を試していますが現在試行錯誤している段階です。

<http://objective-audio.jp/2008/03/core-audio-audiostreambasicdes.html>  
<https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioConverterServicesReference/#//apple_ref/c/func/AudioConverterNew>

[code]

    AudioStreamBasicDescription wavFormat;
    wavFormat.mSampleRate = 8000.0;
    wavFormat.mFormatID = kAudioFormatLinearPCM;
    wavFormat.mFormatFlags = kAudioFormatFlagIsPacked; //WAVの8bitはunsigned
    wavFormat.mBitsPerChannel = 8;
    wavFormat.mChannelsPerFrame = 1;
    wavFormat.mFramesPerPacket = 1;
    wavFormat.mBytesPerFrame = 1;
    wavFormat.mBytesPerPacket = 1;
    wavFormat.mReserved = 0;
    
[/code]

800k8hzなので、上記のようなAudioStreamBasicDescriptionかなと思ってますが、上記をどのように利用するのかでつまずいております。

ご教示いただければ幸いです。  
よろしくお願いいたします。


CC BY-SA 3.0
2015-10-26T04:31:43.597
18078
2015-10-26T04:31:43.597
12972
question
objective-c
Objective-CでNSDataからPCM8bitへの変換方法について