2017-03-28 10 views
0

私はマトリックスクリエイターボードを使用していますが、マイク配列のC++コード用にPythonラッパーを作成しようとしています。16ビットオーディオサンプルをcharに変換する

ライブラリには、1283サ​​ンプルのuint16_t配列を返すread関数があります。

私は、ユーザーが関数の引数として渡すcharアレイへのバッファを書き込みALSAreadi関数にそれを比較しようとしています。

の質問はどのようにALSAは、単一charはわずか8ビット幅であるとき、配列をcharに16ビットのサンプルを書くんですか? そして、uint16_t配列で同じことをやって、それをPythonに渡すと、と同じ結果が得られます。ALSAreadiの機能はありますか?

+2

16ビットのサンプルデータは、16ビットワードのシーケンスです。 'char'の配列は8ビットワードのシーケンスです。 128個の16ビットワードのアレイは、256個の8ビットワードのアレイに等しい。あるアレイから別のアレイにコピーするだけの "変換"はありません。 –

+0

あなたはmemcpyを使用することができました – Jonas

+0

私はmemcpyを使用しましたが、問題は、char配列をPythonに戻してcharポインタから文字列に変換して長さを変更するときです。 0から70の間でジャンプする – LichKing

答えて

0

uint16は2バイト(uint8)として渡すことができますが、C++コードはおそらくユニオンを使用して、USBコードがデータをバイトとして渡すことができるようにデータをuint16として保存できるようにします。 Pythonのコードについては

、これは私が8ビットこれはバイト配列を経由して、新しいuint16の配列に値を追加します

def convert_int8_int16(self, byte_array): 
    new_array = [0]*(len(byte_array)/2) 
    for i in range(len(byte_array)/2): 
     new_array[i] = byte_array.pop(0)*256 + byte_array.pop(0) 

    return new_array 

をuint16のバイトに変換するために使用する機能です。