12-18-2021 10:10 AM
お世話になります。
メモリ不足で困っております。
Forループを2段で組んでいます。
2段目で「この作業を完了するためにはメモリが足りません」と表示されます。
次に「(Hex 0x2) メモリがいっぱいです。」と表示されます。
単純に2段目だけのVIを作成し、1段目の結果を与えて実行すると正常終了します。
1段目の処理が終わったらメモリ開放する方法をとれば解決するのでしょうか?
試しに"メモリ解放要求 関数"を1段目のForループ内に入れたのですが解決しません。入れ方が悪いのかもしれません。
もう少し内容を書くと、
1段目で複数のWAVファイルを順次読み込んで解析、
2段目で複数のWAVを共通に加工しWAVファイル書き込みをします。
WAVファイルを一つだけ実行してもメモリ不足となります。
繰り返しますが、2段目だけで実行すると正常終了します。
どのような、メモリ開放の仕方、または初期化が必要でしょうか?
すみませんが、教えて下さい。
解決済! 解決策の投稿を見る。
12-18-2021 12:02 PM
In my opinion, you don't have full control over memory release, LV will automatically release memory when it deems right.
Missing details,
Memory full as the phrase implies you have used up all your memory, we cannot say why you ended up there but a bunch of memory inefficient operations that led to the memory full or memory was very less to start with and you did not consider that while programming your application.
Definitely, you can workaround the limited RAM scenario by careful planning of tasks and optimize the memory usage (avoiding copies).
12-19-2021 08:14 AM
ご返信、ありがとうございます。
VIを共有します。
処理内容は簡素化しましたが、同様な症状でメモリ不足となります。
wav_test1.vi : メモリ不足となります。
wav_test1.vi : 2段目だけのForループで作成。正常動作。
1段目のForループでWAV解析して係数を出力します。
2段目のForループでWAVファイルに係数を掛けてファイル出力します。
WAVファイルの条件:44.1kHz / 16bit
4分程度のWAVファイルは正常終了します。
7分程度のWAVファイルでメモリ不足となります。
LabVIEW version : LV2018(32bit)
PC : win10(64bit)
RAM : 8G
メモリ対処の方法を教えて下さい。
よろしくお願いします。
12-21-2021 01:37 AM
12-22-2021 03:14 AM
「サウンドファイル簡易読み取り」と「サウンドファイル簡易書き込み」は簡単でよいのですが、メモリを大食いします。
WAVファイルは一度に全長をメモリに乗せないで小分けして読み書きすることと、内容はたいてい整数データなので整数のまま扱うのが普通です。
サウンドファイル関数パレットの下段にある、開く・読み取る・書き込む・閉じるを使ってプログラミングすることを検討してください。行き詰まったらまた質問してください。
12-27-2021 12:16 AM
J.H.Watsonさん ありがとうございます。
開く・読み取る・書き込む・閉じる を使って、より簡素化して検討しています。
VIを共有します。wav_test1-2.vi
wavファイル書き込み時のForループで memory is full となります。
ブロックダイアグラム内にコメントを置きました。
wav_write_forloop.PNG
読み込むwavファイルが長い時、このForループでの処理を分割すればよいのでしょうか?
考えてみたのですが、ここでの分割処理がわからないため教えて下さい。
または他に良い方法があるでしょうか?
WAVファイルの条件:44.1kHz / 16bit
5分程度のWAVファイルは正常終了します。
引き続き、よろしくお願いします。
12-27-2021 03:58 AM
個別のVIを使うとき、「簡易読み込み」と「簡易書き込み」VIの中身をばらすとサブVIの多態性インスタンスが選べません。なので関数パレットから置いて下さい。
一度に読み込むサンプル数を指定してやることで分割処理ができます。ファイルの終わりに達したときはエラーを出さずに残りのデータを返してくれます。
サンプルVIを添付します。サブVIは「多態性セレクタ」を表示させています。
12-27-2021 08:13 AM
J.H.Watsonさま
ご親切にありがとうございます。
右クリックすると、表示項目 > 多様性VIセレクタ とあり選択できることがわかりました。
長めのwavファイルを実行しても、問題なく終わることができました。
このVIを元にしっかり勉強したいと思います。
また、wav16bitのところで符号ビットをマイナス1するご指摘など、ありがとうございます。
さらに、日本語でのサポートをありがとうございました。