2017-03-27 12 views
0

私は目的がCに慣れていて、リバーブやディレイのような効果を伴うサウンドを再生することができるプログラマーを作成しようとしています。残念ながら、私はそのサウンドを再生することはできますが、効果はありません。私は今3日間立ち往生しており、解決策を見つけることができません。誰かが私が間違っていることを伝えることができますか? 私はこのコードを試してみましたが、それとは全く音が出ません。その後AVAudiounit:遅延のようなエフェクトでは音を再生できません

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    AVAudioEngine *engine = [AVAudioEngine new]; 
    AVAudioPlayerNode *playerA = [AVAudioPlayerNode new]; 

    playerA.volume = 0.5; 


    NSURL *Mia1url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MIA1" ofType:@"m4a"]]; 

    AVAudioFile *MIA1 = [[AVAudioFile alloc] initForReading:Mia1url error:nil]; 
    AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:MIA1.processingFormat frameCapacity:1024]; 
    [MIA1 readIntoBuffer:buffer error:nil]; 

    AVAudioUnitDelay *delay = [AVAudioUnitDelay new]; 
    delay.delayTime = 100; 
    delay.wetDryMix = 90; 

    [engine attachNode:playerA]; 
    [engine attachNode:delay]; 

    [engine connect: playerA to: delay format:MIA1.processingFormat]; 
    [engine connect: delay to: engine.mainMixerNode format: MIA1.processingFormat]; 

    [playerA scheduleBuffer:buffer atTime:nil options:AVAudioPlayerNodeBufferLoops completionHandler:nil]; 

    [engine prepare]; 
    [engine startAndReturnError:nil]; 

    [playerA play]; 
} 

私はこのコードを試みたが、音だけ影響を与えることなく来ている:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    AVAudioEngine *engine = [AVAudioEngine new]; 
    AVAudioPlayerNode *playerA = [AVAudioPlayerNode new]; 

    playerA.volume = 0.5; 

    NSURL *Mia1url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MIA1" ofType:@"m4a"]]; 

    AVAudioFile *MIA1 = [[AVAudioFile alloc] initForReading:Mia1url error:nil]; 
    AVAudioPCMBuffer *buffer = [[AVAudioPCMBuffer alloc] initWithPCMFormat:MIA1.processingFormat frameCapacity:1024]; 
    [MIA1 readIntoBuffer:buffer error:nil]; 

    AVAudioUnitDelay *delay = [AVAudioUnitDelay new]; 
    delay.delayTime = 100; 
    delay.wetDryMix = 90; 

    [engine attachNode:playerA]; 
    [engine attachNode:delay]; 

    [engine connect: playerA to: delay format:MIA1.processingFormat]; 
    [engine connect: delay to: engine.mainMixerNode format: MIA1.processingFormat]; 

    [playerA scheduleBuffer:buffer atTime:nil options:AVAudioPlayerNodeBufferLoops completionHandler:nil]; 

    [engine prepare]; 
    [engine startAndReturnError:nil]; 

    //change 
    self.playerA = [[AVAudioPlayer alloc] initWithContentsOfURL:Mia1url error:nil]; 

    //change from [playerA play] to: 
    [self.playerA play]; 
} 

答えて

0

あなたがインスタンス化するのを忘れて、あなたのオブジェクト:

//AVAudioEngine *engine; // no instance exists. 
AVAudioEngine *engine = [AVAudioEngine new]; 
AVAudioPlayerNode *playerA = [AVAudioPlayerNode new]; 

... 

AVAudioUnitDelay *delay = [AVAudioUnitDelay new]; 
... 

また、playerAは、一度だけ使用する前に初期化する必要があります。

詳細を掘る場合は、Apples code samplesをチェックアウトするとよいでしょう。

+0

まだ動作していません:(しかし、助けてくれてありがとう! – slic

+0

あなたはおそらく 'self.playerA'をエンジンに接続しようとしています。あなたの新しい発見とあなたの質問と、何が起こっているのかについての適切な説明があります。 – shallowThought

+0

コードを更新しました。残念ながら、コードサンプルに役立つものは見つかりませんでした。ソリューション? – slic

関連する問題