Diğer iOS cihazlarına ses dosyaları (güvenli/şifreli) gönderebilen bir iOS uygulamasını değiştirmeye çalışıyorum. Ses dosyalarını kaydetmek için AVAudioRecorder'ı kullanır ve alınan ses dosyalarını çalmak için AVAudioPlayer kullanır.AVAudioRecorder, açılabilir ve oynatılabilir .m4a dosyaları oluşturmuyor
Artık Android ile uyumlu dosyalar oluşturmak ve göndermek için uygulamayı değiştirmeye çalışıyorum. ancak bir Android cihazda, iOS cihazda, bu yarattığı
[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithFloat:48000.0] forKey:AVSampleRateKey];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirPath = [paths objectAtIndex:0];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH-mm"];
NSString *filename = [NSString stringWithFormat:@"%@.aac", [format stringFromDate:NSDate.date]];
dosyaları Mac'te çalınabilir: Ben bu mevcut AVAudioRecorder kodunu güncellenmiştir. Dosya uzantısı ".m4a" ile bitecek şekilde manuel olarak değiştirildiyse, dosya Android'de oynatılır.
(".aac" formatı ile avantaj uygulamanın eski sürümleri bu dosyaları almak ve onları geri oynayabileceği - ı geriye uyumluluk muhafaza ettik.)
Yani bu değişikliği yapan: Ancak, sonuçta ortaya çıkan dosya (AVAudioRecorder'dan hiçbir hata olmadan oluşturulur) Mac'lerde ve iOS aygıtlarında oynatılamaz. Ve Android üzerinde çalışıp çalışmadığını duymak için bekliyorum.AVAudioPlayer bu dosyayı açmaya çalıştığında, çıkarır:
Hata Alan = NSOSStatusErrorDomain Kodu = 1685348671 "operasyonu tamamlanamadı (OSStatus hata 1685348671.)" Kod 1685348671 -> "dta?": Dosya bozuk, türünde bir ses dosyasının geçerli bir örneği değil veya bir ses dosyası olarak tanınmıyor.
Sadece bir ".aac" olması için dosyayı yeniden adlandırmak, Mac veya iOS'ta bir öğeye yüklenememesi gerçeğini değiştirmez.
Şimdilik, en iyi çözüm, bir ".aac" dosyası oluşturmak ve daha sonra Android sonuna ".aac" ile ".m4a" ile değiştirmek ve oynatmaya çalışmak gibi görünüyor.
Soru 1: Dosya adı uzantısını AVAudioPLayer başarısız olmasına neden olabilir değişen neden bilen var mı? BTW, yukarıda oluşturulan ".m4a" dosyasını, ben bu yüzden sorun dosyası biçiminde veya bu dosya türünü okumak için iOS veya Mac yetersizlik ile olup olmadığını söyleyemem Mac üzerindeki herhangi bir şeyle açılamaz .
https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2013-24.m4a https://dl.dropboxusercontent.com/u/14939586/2013-07-08%2010-11.aac
Soru 2:
meraklı herkes için, ben burada bir ".aac" bir kopyasını ve AVAudioRecorder bir ".m4a" dosyasını koymak ben birine AVAudioRecorder set ederken Kanal, sonuçta elde edilen dosya stereodur. Niye ya? kayıpsız kodlama için AAC-LC belirtmek için yine de var mı:
Soru 3 (En azından VLC meta verileri hakkında söylediği budur)? Ben alt düzey API AVAudioRecorder hareket Ya ben sadece bunu yapabilirsiniz?
bu yararlıdır: http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format –
Bu soruya verilen cevap tamamen yanlıştır. Dosya gerçek bir AAC dosyası değil. Sadece bir m4a ile sarılmıştır. Diğer cevaplardan biri doğrudur. Ayrıca daha fazla yardım bu cevap oldu: http://stackoverflow.com/a/12698691/86020 – mahboudz