0

レコードとプレーヤーの2つのクラスがあります。私のメイン シーンでは、それらのインスタンスを作成し、再生して記録します。しかし、私が見たように、それは記録するだけで、どういうわけか再生しません (ファイルはそこにありません!)

両方のコードは次のとおりです。

-(void)record {
    NSArray *dirPaths;
    NSString *docsDir;
    NSString *sound= @"sound0.caf" ;
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ;
    docsDir = [dirPaths objectAtIndex:0];
    NSString *soundFilePath = [docsDir stringByAppendingPathComponent:sound];
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

    NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
      [NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
      [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
      [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
      [NSNumber numberWithInt: AVAudioQualityMax],
      AVEncoderAudioQualityKey, nil];

    NSError *error;
    myRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:settings error:&error];

    if (myRecorder)  {
        NSLog(@"rec");
        [myRecorder prepareToRecord];
        myRecorder.meteringEnabled = YES;
        [myRecorder record];
    } else
        NSLog( @"error"  );
}

のログが見れます rec

-(void)play {
  NSArray *dirPaths;
  NSString *docsDir;
  dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    NSUserDomainMask, YES);
  docsDir = [dirPaths objectAtIndex:0];
  NSString *soundFilePath1 =  @"sound0.caf" ;
  NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath1];
  BOOL isMyFileThere = [[NSFileManager defaultManager] fileExistsAtPath:soundFilePath1];
  if(isMyFileThere) {
    NSLog(@"PLAY"); 
    avPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:NULL];
    avPlayer1.volume = 8.0;
    avPlayer1.delegate = self;
    [avPlayer1 play];
 }
}

のログが表示され PLAYない!

私はそれらの両方を次のように呼び出します:

recInst=[recorder alloc]; //to rec
[recInst record];

plyInst=[player alloc]; //play
[plyInst play];

レコーダーを停止するには:

- (void)stopRecorder {
    NSLog(@"stopRecordings");
    [myRecorder stop];
    //[myRecorder release];    
}

ここで何が問題なのですか?ありがとう。

4

1 に答える 1

1

記録方法では、次のようにファイル名をパスに追加しています。

NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound0.caf"];

play メソッドではそれを行わないため、Documents ディレクトリではなく、現在の作業ディレクトリにあるファイルを探します。

あなたがする必要があります:

NSString *soundFilePath1 = [docsDir stringByAppendingPathComponent:@"sound0.caf"];

それ以外の:

NSString *soundFilePath1 =  @"sound0.caf" ;

もう 1 つ注意してください: soundFilePath と soundFilePath1 は両方ともローカル変数です。したがって、それらはそれぞれのメソッドの外では見えません。したがって、それらに異なる名前を付ける必要はありません。両方の soundFilePath を呼び出すことができ、競合は発生しません。

于 2012-06-10T16:36:56.430 に答える