AVAudioPlayer를 사용하여 음악을 재생하는 앱을 만들었습니다. 노래를 업로드 또는 다운로드하고, 코어 데이터에 기록한 다음, 선택시 재생하도록 호출합니다. 내가 테스트 한 15 곡은 모두 iPhone Music Client와 내 컴퓨터를 사용하여 정상적으로 작동합니다.AudioPlayer iOS 및 m4a
그러나 세 개는 앱에서 재생되지 않습니다. 구체적으로 말하자면,이 15 개의 노래를 순서에 상관없이 업로드하고, Model.sqlite를 지우고, 앱에 다시 다운로드하고, 그 중 3 명이 재생되지 않는 것을 발견 할 수 있습니다. 그러나 그들은 적절한 제목과 예술가를 가지고 있습니다.
이것을 살펴보면, 작동하지 않는 파일이 .m4a라는 점이 다릅니다. AVAudioPlayer로 해당 형식의 파일을 재생하려면 어떻게해야합니까?
EDIT ("뭐죠"리콜 "어떤 URL 당신이 AVAudioPlayer을 초기화합니까?"?) : 사용자가 응용 프로그램을 통해 액세스 할 수있는 노래와 서버가
. 검색 할 하위 집합 S를 선택한 후 응용 프로그램은 S를 다운로드하고 NSManagedObjectContext를 사용하여 CoreModel에 씁니다. 각 노래는 고유 한 ID와 하위 집합 엔티티 (이 경우 S)와의 관계로 별도의 엔티티로 저장됩니다.
AppDelegate를 사용하여 컨텍스트를 사용하여 올바른 노래를 얻으 려 할 때도 데이터가 반환됩니다. 나는 그 때문에 같은 AVAudioPlayer를 초기화 :
[[AVAudioPlayer alloc] initWithData:(NSData *)[currentSong valueForKey:@"data"] error:nil];
는 ... 그래서 나는 그 쓴 후 실제로 (바보 나) 오류가 무엇인지 체크 아웃하지 않은 것을 깨달았다. 지원되지 않는 파일 형식으로 반환하는 것은 OSStatus error 1954115647
입니다. 이것을 조금 더 살펴보면, 나는 이것을 iPhone: AVAudioPlayer unsupported file type이라고 알았습니다. 해결책은 처음에는 불량 데이터를 없애거나 URL 내용으로 초기화하는 것으로 나타납니다. 핵심 모델에서 데이터를 작성하여 URL로 제공 할 수 있습니까?
편집 : (. 파일을 비교하여 서로 다른 있습니까?)
네,이다. 내 서버에서 샘플 .m4a 파일을 가져오고 있는데,이 파일은 앱에 의해 업로드되었으며 iTunes에있는 파일과 비교됩니다. 내가 찾은 것은 파일이 오프셋 (offset) 229404 (2906191 바이트 중) 전에 잘려서, 20680001 A0000E21
으로 시작한다는 것입니다. iTunes 버전에서는 0028D83B 6D646174
이 해당 바이트 앞에 놓입니다. 그 전에는 큰 블록 인 영 (zero)으로 시작하여 아이튠즈 인코딩 정보가 선행 된 커다란 데이터 블록이있다. 맨 위에는 파일을 M4A로 나열하는 인코딩 정보가 더 있습니다.
예, .m4a는 iOS에서 지원되며 모든 파일은 일반적인 방법으로 iPhone에서 재생해도 문제가 없습니다. – user592419