1

こんにちは、コア オーディオ ファームをこの本で学ぼうとしています: http://www.amazon.com/Learning-Core-Audio-Hands-On-Programming/dp/0321636848

しかし、このコードを実行しようとすると:

      #import <Foundation/Foundation.h>
     #import <AudioToolbox/AudioToolbox.h>

#define SAMPLE_RATE 44100
 #define DURATION 5
  #define FILENAME_FORMAT @"%0.03f-test.aif"

  int main(int argc, const char * argv[])
 {

@autoreleasepool
{
    if(argc<2)
        return -1;

    double hz = 44;
    assert(hz>0);
    NSLog(@"Generating hz tone:%f",hz);

    NSString* fileName = [NSString stringWithFormat:FILENAME_FORMAT, hz];
    NSString* filePath = [[[NSFileManager defaultManager]currentDirectoryPath]
                          stringByAppendingPathComponent:fileName];
    NSURL* fileURL = [NSURL fileURLWithPath:filePath];


    AudioStreamBasicDescription asbd;
    memset(&asbd, 0, sizeof(asbd));
    asbd.mSampleRate = SAMPLE_RATE;
    asbd.mFormatID = kAudioFormatLinearPCM;
    asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    asbd.mBitsPerChannel = 16;
    asbd.mChannelsPerFrame = 1;
    asbd.mFramesPerPacket = 1;
    asbd.mBytesPerFrame = 2;
    asbd.mBytesPerPacket = 2;


    AudioFileID audioFile;
    OSStatus audioErr = noErr;
    audioErr = AudioFileCreateWithURL((__bridge CFURLRef)fileURL, kAudioFileAIFFType, &asbd, kAudioFileFlags_EraseFile, &audioFile);
    assert(audioErr == noErr);

    long maxSampleCount = SAMPLE_RATE * DURATION;
    long sampleCount = 0;
    UInt32 bytesToWrite = 2;
    double waveLengthInSamples = SAMPLE_RATE / hz;

    while(sampleCount < maxSampleCount)
    {
        for(int i=0;i<waveLengthInSamples;i++)
        {
            SInt16 sample;
            if(i<waveLengthInSamples/2)
                sample = CFSwapInt16BigToHost(SHRT_MAX);
            else
                sample = CFSwapInt16BigToHost(SHRT_MIN);

            audioErr = AudioFileWriteBytes(audioFile, false, sampleCount*2, &bytesToWrite, &sample);
            assert(audioErr = noErr);
            sampleCount++;
        }
    }

    audioErr = AudioFileClose(audioFile);
    assert(audioErr = noErr);


}
return 0;

}

プログラムは次のエラー コードで終了します: プログラムは終了コードで終了しました: 255

誰でも私を助けることができますか?サンプルコードをダウンロードしましたが、同じエラーが発生します。xcode 5 と 64 ビット macbook を使用しています。ご協力いただきありがとうございます。

4

1 に答える 1

1

本のコードを変更して、トーンを明示的に 44Hz に設定したようです。

double hz = 44;

ただし、元のコードでは、トーンをコマンド ライン パラメーターとして入力する必要がありました。これらの行はそのパラメーターをチェックしており、パラメーターが見つからない場合は -1 (または 255) を返します。

if(argc<2)
    return -1;

この 2 行を削除して、パラメーター チェックを削除します。

于 2013-09-16T20:52:21.013 に答える