Mam funkcję mostkowania w Swift, jeden z argumentów w C jest AudioBufferList *
. W Swift generuje to UnsafePointer<AudioBufferList>
. Udało mi się ocenić wskaźnik, dzwoniąc pod numer audioData[0]
(czy jest lepszy sposób?). Ale zmagam się z następnymi 2 poziomami w dół: tablica .mBuffers
z AudioBuffer
i ich członkami.Używanie AudioBufferList z Swift
W C to po prostu być
Float32 *audioData = (Float 32*)abl->mBuffers[0]->mData;
output = audioData[sampleNum]...
w Swift pierwszy Najdziwniejsze jest to, że nie pozwoli mi uzyskać dostęp do elementów mBuffers
ale jest w pełni szczęśliwy, kiedy do niego dostęp w domu. Innymi słowy, to działa i nawet ma poprawnych danych (dla pierwszego członka mBuffers
ja przypuszczam) ...
println(abl[0].mBuffers.mNumberChannels) // But .mBuffers should be an []!
Po drugie, niech mi wydrukować .mData
indeksów, ale wartość jest zawsze ()
println(abl[0].mBuffers.mData[10]) // Prints '()'
Próbowałem różnych operacji rzucania i dostępu do wielu wskaźników, ale bezskutecznie ... żadnych pomysłów?
Oto C i Swift definicje dla AudioBufferList
i AudioBuffer
dla wygody ...
// 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<()>
}
Cześć, nie mieli okazję spróbować tego w mój projekt, ale chciałem tylko szybko powiedzieć, że 'reinterpretCast' może pomóc też ... –
To dobra uwaga, ale nie jestem pewna jak tego użyć tutaj. Jest nieudokumentowana, więc nie wiem, czy działa w tej samej lokalizacji w pamięci, kopiuje rzeczy dookoła, czy ... – jtbandes
thx. Postanowiłem dać ci kredyt, nawet jeśli Adam's jest lepszy :) –