Frage

Ich versuche, eine Sounddatei von einem iPhone-Programm zu spielen.

Hier ist der Code:

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );

Der erste NSLog ist zu überprüfen, ob ich den Zugriff auf die Datei haben (ich habe), die zweite NSLog ist die Datei-URL zu zeigen, und die dritte NSLog gibt -1500 „Ein unbekannter Fehler ist aufgetreten.“

Für das zweite NSLog, erhalte ich die folgende Ausgabe:

file: // localhost / Users / alan / Library / Application 敲 慬 楴 敶 瑓 楲 杮 upport / iPhone 蒠 ꁻ ތ Â ⾅ 獕 牥 ⽳ 污 湡 䰯 扩 慲 祲 䄯 灰 楬 慣 楴 湯 匠 灵 潰 瑲 椯 桐 湯⁥ 楓 畭 慬 潴 ⽲ 獕 牥 䄯 灰 楬 慣 楴 湯 ⽳ 䙂 㕅 㡂 㤱 䌭 䐳 ⴸ 䐴 䙃 㠭 ㍃ⴷ 䍁 ㈶ 㠵 䙁 㤴 ㈰ 䰯 捯 瑡 䵥 ⹥ 灡 ⽰ 汰 祡 挮 晡 imulator / User / Anwendungen / BFE5B819 -C3D8-4DCF-8C37-AC6258AF4902 / LocateMe.app / play.caf

Dies ist entweder aufgrund meiner Missverständnis der „Beschreibung“ -Verfahren oder dies trägt zu dem Problem.

Jede Idee, was falsch läuft?

War es hilfreich?

Lösung 3

Ein Update zu diesem Thema.

habe ich meine Schlüssel, damit ich meine App auf dem Gerät ausgeführt werden.

Ich fand, dass meine .caf Datei erfolgreich gespielt, wenn die Anwendung auf dem Gerät ausgeführt wird.

Ich habe dann versucht, verschiedene Alternativen.

Eine .wav-Datei, die 60 Sekunden lang ausgefallen ist auf dem Simulator und das Gerät arbeiten.

Eine .wav-Datei, die 5 Sekunden lang ist, würde auf dem Simulator arbeiten, aber nicht auf dem Gerät.

Eine .aiff-Datei, die 5 Sekunden lang Arbeiten auf dem Simulator und das Gerät.

Es wäre gut, definitiv zu wissen, was der Simulator und das Gerät über die Datei überprüft, wenn es um AudioServicesCreateSystemSoundID geben

Andere Tipps

Der erste Parameter zu NSLog ist ein Format-String; Sie [URL description] als Format-String an die zweite Verwendung von NSLog vorbei sind. Das ist schlecht, denn wenn die Beschreibung der URL keine % Zeichen enthält, dann wird es random stuff vom Stapel Druck aufzuwickeln.

Stattdessen schreiben

NSLog(@"%@", URL);

Sie müssen nicht einmal -description verwenden hier; NSLog wird es für Sie aufrufen, automatisch, weil %@ bedeutet „ein Objekt“, nicht „ein NSString,“ und es ist intelligent genug, um für Sie das Richtige zu tun.

Darüber hinaus scheint es, dass der iPhone-Simulator nicht spielen mag (Systemsound) ertönt 5 Sekunden lang. Ich hatte das gleiche Problem wie apps fast immer einen Start spielt Systemsound.

Eine der Apps Ich war auf dem Simulator arbeiten würde den Ton nicht spielen, aber das Gerät würde. Später fand ich, dass es einige seltsame Einschränkung auf dem Simulator ist und wie es sich anhört behandelt. Ich habe einen Fehler mit Apple eingereicht. Hoffentlich wird diese Adresse mit der Veröffentlichung des iPhone SDK 3.0.

habe ich versucht, das gleiche mit meiner Anwendung, die einfach gut spielt klingt. Die Klänge spielen nicht im Simulator und wenn ich versuche, die URL NSLog, erhalte ich den gleichen Müll wie Sie und EXC_BAD_ACCESS auf der Spitze. Wenn ich die URL auf dem Gerät anmelden, ist die URL in Ordnung, aber ich habe trotzdem EXC_BAD_ACCESS. Wenn ich die Protokollierung fallen, Töne zu spielen und alles funktioniert. Wenn jemand dieses Verhalten erklären könnte, würde ich dankbar sein. Wie für Ihr Problem, würde ich die Protokollierung fallen und den Code auf dem Gerät versuchen.

Verwenden Sie "AVAudioPlayer" Klasse für die Wiedergabe von .caf Dateien

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top