したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

波形描画ビューのその後

1sagamat:2023/08/15(火) 21:00:03
うつぼかずら様

こんばんは。お世話になっております。
波形描画ビューのページにコメントを書き込もうとしましたがうまく反映されないようですので、こちらに失礼いたします。
波形描画ビューの記事、大変参考になりました。ありがとうございます。
記事の最後に触れられている「音声処理クラスから音声波形を取得する方法」が気になります。
音声処理クラスからパラメータ操作クラスへの配列の受け渡し、ならびに、その逆ができるようになれば、いろいろとできることが増えるのではと想像しております。
是非とも続きの記事を拝見したく、今か今かと更新を期待しております。
お忙しいところ恐縮ですが、上記方法のご教示をいただければ幸いです。
今後とも何卒よろしくお願い申し上げます。

2管理人★:2023/08/17(木) 00:59:38
sagamatさん

書き込みありがとうございます。
頑張って記事を書いてみたいと思いますが、少しお時間をください。

3管理人★:2023/08/17(木) 01:01:25
とりいそぎデータ(配列)を受け渡しする方法について簡単なサンプルコードを記載します。

パラメーター操作クラスから音声処理クラスへのデータ受け渡しの方法になりますが、
逆のパターンでも同じ処理でできると思います。

// パラメーター操作クラスから音声処理クラスにメッセージを送信する関数
tresult MyVSTController::sendData(void* data, size_t _size)
{
// パラメーター操作クラスから音声処理クラスにメッセージを送るためメッセージクラスを確保する
IMessage* msg = allocateMessage();

// メッセージクラスのメッセージIDを設定する。メッセージID必ず設定する必要がある。
msg->setMessageID(u8"sendData01");

// メッセージ内にデータを設定する。データは「データID(文字列)+データ中身(ポインタ)」という形をとる
msg->getAttributes()->setBinary(u8"size", (void*)(&_size), sizeof(size_t));
msg->getAttributes()->setBinary(u8"data", (void*)data, (uint32)_size);

// メッセージクラスを音声処理クラスに送信する
sendMessage(msg);

// 確保したメッセージクラスは解放する
msg->release();

return kResultTrue;
}

4管理人★:2023/08/17(木) 01:02:34
// 音声処理クラスでメッセージを受け取った時の関数
result MyVSTProcessor::notify(IMessage* message)
{
// メッセージIDがパラメーター操作クラスから送られたものかどうかチェックする。
if (strcmp(message->getMessageID(), u8"sendData") == 0)
{
// メッセージクラスのデータ読込用の一時変数
const void* tmp;
uint32 datasize;

void* _data;
size_t _size;

// メッセージ内のデータを受け取る
// まずはデータID「size」のデータを受け取る
message->getAttributes()->getBinary("size", tmp, datasize);
memcpy(&_size, tmp, sizeof(size_t));

// 同様にデータID「data」のデータを受け取る
message->getAttributes()->getBinary("data", tmp, datasize);
_data = new char[datasize];
memcpy(_data, tmp, datasize);

// -------------------------------
// ここで何かする。
// -------------------------------

return kResultOk;
}

// メッセージIDがパラメーター操作クラスから送られたものでなければ、継承元クラスのnotifyを呼び出して終了。
return AudioEffect::notify(message);
}

5管理人★:2023/08/17(木) 01:07:58
インデントが消えてかなり見辛くなってしまいましたがご確認いただければと思います。

なお、音声処理クラスでデータの受け渡しをする場合は下記に注意してください。
・マルチスレッド処理のためprocess関数やnotify関数などは別スレッドになっている
・リアルタイムスレッド(process関数など)からデータ送信関数を呼び出さない

6sagamat:2023/08/17(木) 11:54:37
うつぼかずら様

お忙しい中での早速のご教示、感謝申し上げます!!
いくつかわからないところがありそうですが、まずは試してみます!
とりいそぎ、御礼のみにて失礼いたします。
今後とも何卒よろしくお願い申し上げます。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板