Ich habe eine Brückenfunktion in Swift, eine der Argumente in C ist AudioBufferList *
. In Swift wird ein UnsafePointer<AudioBufferList>
generiert. Ich habe es geschafft, den Zeiger durch Aufruf von audioData[0]
zu unterscheiden (gibt es einen besseren Weg?). Aber ich kämpfe mit den nächsten 2 Stufen: die .mBuffers
Reihe von AudioBuffer
's und ihre void *
/UnsafePointer<()>
.mData
Mitglieder.Verwenden von AudioBufferList mit Swift
In C wäre es einfach
seinFloat32 *audioData = (Float 32*)abl->mBuffers[0]->mData;
output = audioData[sampleNum]...
In Swift die erste Seltsame ist, dass es mir die Elemente mBuffers
Zugriff nicht zulassen, ist aber vollkommen glücklich, wenn ich es als eine Eigenschaft zuzugreifen. Mit anderen Worten, das funktioniert und auch korrekte Daten (für das erste Mitglied mBuffers
nehme ich an) ...
println(abl[0].mBuffers.mNumberChannels) // But .mBuffers should be an []!
Zweitens hat mich mal .mData
Indizes drucken, aber der Wert ist immer ()
println(abl[0].mBuffers.mData[10]) // Prints '()'
Ich habe verschiedene Casting Ops ausprobiert und mit mehreren Indizes zugreifen, aber ohne Erfolg ... irgendwelche Ideen?
Hier sind die C und Swift-Definitionen für AudioBufferList
und AudioBuffer
für Komfort ...
// C
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements
// ...and a bit more for c++
}
struct AudioBuffer
{
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
...
// SWIFT
struct AudioBufferList {
var mNumberBuffers: UInt32
var mBuffers: (AudioBuffer)
}
struct AudioBuffer {
var mNumberChannels: UInt32
var mDataByteSize: UInt32
var mData: UnsafePointer<()>
}
Hallo, zum Schweigen zu bringen hat keine Chance, zu versuchen, dies hatte die in mein Projekt wollte aber nur schnell sagen, dass 'reininterpretCast' auch helfen könnte ... –
Das ist ein guter Punkt, aber ich bin mir nicht sicher, wie ich es hier benutzen soll. Es ist undokumentiert, also weiß ich nicht, ob es am selben Ort im Speicher agiert, Dinge kopiert oder was ... – jtbandes
thx. entschied, Ihnen das Guthaben zu geben, selbst wenn Adam's besser ist :) –