Extrahieren Sie die rohen PCM-Samples der iPod Library und spielen Sie mit Soundeffekten

8

Ich versuche, rohe PCM-Samples aus einem MP3 in der iPod Library zu extrahieren, damit ich den Song abspielen und die Tonhöhe, das Tempo und die Klangeffekte (wie Filter) verändern kann. Ich bin bereits den Weg von AVPlayer und AVAudioPlayer gegangen, die beide nicht viel Kontrolle über die Wiedergabe erlauben.

Der Code unten ist so weit wie ich damit gekommen bin. Ich bin jetzt an einem Punkt, wo ich nicht weiß, was ich mit dem CMSampleBufferRef in meiner while-Schleife machen soll, weil ich nicht weiß, welches Framework verwendet werden soll, um das Audio abzuspielen und solche Effekte anzuwenden.

Irgendeine Idee, was wäre der beste Ansatz, um dies zu erreichen? Ich habe Fälle betrachtet, in denen die Datei mit einem AVAssetWriter konvertiert wurde, aber das wird es nicht für mich schneiden, weil der Prozess zu zeitaufwendig ist. Sicher kann ich die PCM-Samples einfach in den Speicher für die Wiedergabe lesen, ohne sie zuerst auf die Festplatte schreiben zu müssen?

NB: Ich weiß, dass der folgende Code auf eine MP3 im Projekt verweist, aber ich bin mir bewusst, dass dieser Ansatz genauso funktioniert, als würde ich einen NSURL aus der MPMediaPropertyAssetURL

ziehen %Vor%     
Dino 25.01.2011, 17:11
quelle

4 Antworten

8

Ich mache etwas ähnliches in meinem eigenen Code. Die folgende Methode gibt einige NSData für einen AVURLAsset zurück:

%Vor%

Ich würde dies auf einem Hintergrundthread empfehlen, weil es zeitaufwendig ist.

Ein Nachteil dieser Methode ist, dass der gesamte Song in den Speicher geladen wird, was natürlich begrenzt ist.

    
Tom Irving 25.01.2011 18:15
quelle
5

Zusätzlich zu Tom Irvings Antwort schlage ich vor,

zu ersetzen %Vor%

mit

%Vor%

vermeidet doppelte Behandlung der Samples und reduziert den Speicherverbrauch.

Alternativ können Sie [NSMutableData dataWithLength: length] in einem Pool für automatische Freigabe umbrechen, wie in der folgenden Abbildung gezeigt: in dieser Antwort auf eine nicht verwandte, aber ähnliche Frage.

    
unsynchronized 21.09.2011 19:40
quelle
2

Ich denke, du willst das da drin, um sein PCM zu sichern ...

%Vor%     
TurqMage 08.04.2011 23:20
quelle
0

Für die Songdauer glaube ich, dass du einfach den Song Asset soy abfragen kannst:

%Vor%     
Jake Jacobs 22.08.2012 00:31
quelle

Tags und Links