トピック
受付中
K kumakumanet

DATについて

NCFSMPで録音したDATデータを使い遊んでいて ふと録音データの内容はどうなっているのか気になりました NCFSMPを改造してTXTで保存しようとしてみましたができませんでした また録音データを読み込んで使うことはできますがPRINTはできませんでした ①録音データは必ずDATで保存するしかないですか? ②DATデータの中身を見ることはできませんか? どちらか分かりましたら回答お願いします
0そうだね
プレイ済み
返信[1]
親投稿
2.DATの中身は配列変数、変数はPRINTできる、つまりそういうこと。
1そうだね
プレイ済み
返信[2]
親投稿
K kumakumanet
回答ありがとうございます DATの中身は配列変数なんですね 配列用のPRINTを試してみます
1そうだね
プレイ済み
返信[3]
親投稿
☆Tatsukin★ tatu_kin1192
VAR A[100]またはDIM A[100]と なっていた場合、 While I<100 For I=0 to 1 step 1 ?A[I] Wend とすれば多分いけます。
0そうだね
プレイ済み
返信[4]
親投稿
☆Tatsukin★ tatu_kin1192
1→しようと思えば出来ますが、 DIM A[100] A0$=STR$(A[0]) A1$=STR$(A[1]) A2$=STR$(A[2]) という風に一つずつ代入していくしかないですね。 大変時間がかかります。
0そうだね
プレイ済み
返信[5]
親投稿
たぶんいけないかも…
0そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
録音して波形描かなかったらもったいないオバケともったいない爺さんが鍋パーティー開くレベル。 8bit 録音だったら for i = 0 to len(dat)-1 gline i, 120, i, 120-dat[i] next 16bit 録音だったら for i = 0 to len(dat)-1 gline i, 120, i, 120-dat[i]/256 next
0そうだね
プレイ済み
返信[7]
親投稿
K kumakumanet
☆Tatsukin★さん 録音データはDATで保存するのが効率的なんですね 具体的なプログラム例をありがとうございます 試したのですがエラーが出てしまいました!
0そうだね
プレイ済み
返信[8]
親投稿
K kumakumanet
でんぺんさん やっぱり難しいようですね MIKIさん 上のプログラムを実行したところ録音データの波形が表示されました まだ写しただけで理解していないので 内容についてこれから考えます
0そうだね
プレイ済み
返信[9]
親投稿
K kumakumanet
MIKIさん 白い部分が録音データの内容だとわかりました(たぶん) 録音データは波形を配列変数にして保存されているんですね! 回答ありがとうございました! 分からないことが多いので公式ガイドを買おうかな…
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
よかったです。 そしたら次は FFT して周波数成分も表示しないと、もったいないばあさんが阿波踊り始めるレベル。
0そうだね
プレイ済み
返信[11]
親投稿
コメントが適当で(?)すいませんでした。 ☆Tatsukin★さんのサンプルがそのままでは動かないという意味だったんですが、とりあえずエラーが出たところだけ修正すると、ただ配列の内容を表示したいだけなら、5行目のWHILEは不要というか5行目以降はこんな感じです。 FOR I=0 TO 16384-1 ?A[I] NEXT 数字のところをあえて-1と書いたのは用意した配列のサイズをFORで回すときは0から数えるんで実際は配列のサイズー1になるから、それをわかりやすいように書いただけで、始めから1引いた値にしても大丈夫です。 一応そんな感じです!
0そうだね
プレイ済み
返信[12]
親投稿
K kumakumanet
MIKIさん 高速フーリエ変換を検索してみたのですが 検索しただけでは全く理解できませんでした 追加コンテンツの高度サウンドユニットにもFFT命令があるようですね もうしばらく調べて考えてみます
0そうだね
プレイ済み
返信[13]
親投稿
K kumakumanet
でんぺんさん 詳しくありがとうございます 中身を表示して見ることができました! 自分でもエラーを直せるよう勉強します
0そうだね
プレイ済み
返信[14]
親投稿
MIKI ifconfig
FFT ライブラリ公開しています。 ・FFT4G_H [43SEAXMD] 使い方 var n=256, z#[n*2] ' n は 2 のべき乗(2,4,8,16,32,64,128,256,512,1024,...) であること for i = 0 to n - 1 z#[i * 2] = dat[i]: z#[i * 2 + 1] = 0 next fft n, z# for i = 0 to n - 1 var k = i * 2 var r# = log(max(0.001, sqr(z#[k] * z#[k] + z#[k + 1] * z#[k + 1]))) * 20 gpset i, 239-r#, #green next
0そうだね
プレイ済み
返信[15]
親投稿
K kumakumanet
MIKIさん 丁寧にありがとうございます! 実行してみたところ左右対称の緑の点が表示されました これが周波数成分なんですね (今のところ式の内容は理解できていません)
0そうだね
プレイ済み
返信[16]
親投稿
MIKI ifconfig
>これが周波数成分なんですね そうです。 まあ必要なければ使わなくていいと思います。 FFT は複素数の配列から複素数の配列へ変換するので、 最初のループは実数配列である dat[n] を複素数配列 z#[n * 2] にしてるとこです。この FFT ライブラリでは z#[i*2] が i 番目の複素数の実部 z#[i*2+1] が i 番目の複素数の虚部 を表すという約束です。 二番目のループは、各複素数の絶対値 = √(実部の2乗 + 虚部の2乗) の対数をとりプロットしています。 対数を取るのは小さい値を見やすくするためです。 横軸も対数表示(1Hz, 10Hz, 100Hz, 1000Hz,... を等間隔に表示)することが多いですね。(このプログラムはそうなってません)
0そうだね
プレイ済み