문제

인터넷에서로드 된 사운드 파일을 재생하고 싶기 때문에 iPhone SDK Speakhere 샘플에서 시작하려고했습니다. 사운드를 녹음 한 다음 인터넷에 저장하고 업로드 한 후 해당 파일을 다운로드하고 사운드 도구에서 문제없이 재생할 수있었습니다. 하지만 Speakhere에서 그 URL을 재생하려고 할 때 오류가 발생합니다. Program received signal: “EXC_BAD_ACCESS”.

주위를 추적 한 후, 나는 그것을 발견했다 -[AudioPlayer calculateSizesFor:], 그것은 설정되었습니다 bufferByteSize 수많은 806128768로 버퍼 할당이 실패했습니다.

그리고 그 때문에

AudioFileGetProperty(audioFileID, kAudioFilePropertyPacketSizeUpperBound, &propertySize, &maxPacketSize);

그만큼 maxPacketSize 반품은 806128768입니다.

어떻게 만드는 방법이 궁금합니다 AudioFileGetProperty 일하다.

내 사운드 파일입니다 여기, 마우스 오른쪽 버튼을 클릭하고 다운로드 할 수 있습니다 여기.

이 방법을 사용하여 URL을 설정하고 있습니다. -[AudioViewController playOrStop] 방법:

// AudioPlayer *thePlayer = [[AudioPlayer alloc] initWithURL: self.soundFileURL];
AudioPlayer *thePlayer = [[AudioPlayer alloc] initWithURL:
    [NSURL URLWithString: @"http://chineseresume.com/localbiz/uploads/myfilename_7_Recording.caf"]];

모든 제안은 매우 환영합니다.

도움이 되었습니까?

해결책

예, 사용해야합니다 오디오 파일 스트림 서비스 인터넷에서 직접 플레이합니다.

"Audiofilestreamexample"예제가 유용하다는 것을 알았습니다.

/Developer/Examples/CoreAudio/Services/AudioFileStreamExample/

또한 Matt Gallagher는 ""라는 기사가 있습니다.스트리밍 및 MP3 스트림 재생"여기에는 iPhone 예제 코드가 포함되어 있습니다. 신중하게 보지 못했지만 도움이 될 것 같습니다.

다른 팁

주요 문제는 당신이 사용하는 코드가 거래한다는 것입니다. Audiofile 객체 (디스크의 로컬 오디오 파일) 그러나 네트워크에서 오디오를로드 할 때 사용하려는 오디오 필 스트림, 여기에는 자체 API 호출 세트가 있습니다. AudioFileStreamOpen, AudioFileStreamParseBytes, 등.

나는 해결 방법을 알아 냈다. 인터넷에서 로컬 파일로 컨텐츠를 복사 한 다음 해당 로컬 파일에서 사운드를 재생하는 것입니다. 문제를 해결하는 것처럼 보입니다.

완벽하지는 않지만 단지 작동합니다. 실제 해결책이 있으면 알려주세요.

인터넷에서 로컬 파일로 복사 할 코드는 다음과 같습니다.

-(CFURLRef)saveURL:(NSString *)urlString {
    NSURL *url = (NSURL*)[[NSURL alloc] initWithString:urlString];
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];
    NSArray *filePaths =    NSSearchPathForDirectoriesInDomains (                        NSDocumentDirectory,                                                        NSUserDomainMask,                                                   YES                                                    ); 

    NSString *recordingDirectory = [filePaths objectAtIndex: 0];

    CFStringRef fileString = (CFStringRef) [NSString stringWithFormat: @"%@/BufferFile.caf", recordingDirectory];
    NSLog(@"fileString = %@" , fileString);
    // create the file URL that identifies the file that the recording audio queue object records into
    CFURLRef fileURL =  CFURLCreateWithFileSystemPath (                                                NULL,   fileString,                                             kCFURLPOSIXPathStyle,                                             false);
    SInt32 err = 0;

    CFURLWriteDataAndPropertiesToResource (
  fileURL, (CFDataRef)data, nil, &err);
    return fileURL;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top