HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0926
MNIGHT音楽をループ再生したい3解決


MNIGHT

リンク

2012/9/26(Wed) 17:12:22|NO.49585

oggかmp3の指定範囲をループ再生をしたいです

hmmでは指定範囲のループが出来ないように思えました
hspoggではループ開始位置が最初固定なので理想的ではないです

ovplayでは指定範囲のループ再生が可能でしたが、音量調整の仕方が難しいです
db単位で音量を調整するので、百分率で表せないとインターフェースに難ありです
ファイル毎にあらかじめdbを登録しておけということでしょうか・・・?

みなさんは音楽のループ再生をどう行っていますか?
ループ区間のみのファイルで行うというのも手かもしれませんが、できることなら冒頭にループしない部分を持たせたいです



この記事に返信する


なたで

リンク

2012/9/26(Wed) 22:33:21|NO.49593

MNIGHTさん、こんにちは。

百分率というのが、最大振幅に対する比率を表すとするなら、
次のように変換できます。


#module #defcfunc level double x return(20.0 * logf(x) / logf(10)) #defcfunc OvplayVolume double x,local y y = level(x) //デシベルへ変換 // ov_setvolumeでの単位へ if(y * 0.0 != 0.0) { return(-10000) //負の無限大 } else { return(int(y * 100.0)) // 1/100dB単位 } #global mes OvplayVolume(0.0) mes OvplayVolume(0.5) mes OvplayVolume(1.0)

以下、雑学です。

通常デシベルは、
f(x) = 20log10(x / x0)
x が調べたい値
x0 が基準とする値

ここで、パソコンだと音声の振幅は正規化されているため、
振幅は、-1.0 から 1.0 までをとり、x0 = 1.0 となります。
また、xは振幅の比率で、 0.0 から 1.0 の値をとります。
つまり、 f(x) は、「負の無限大」から「0」までを取ります。
また、log10(x) = ln(x) / ln(10) です。
これらから、HSPでデシベル値へ変換したい場合、
次のように計算できます

f(x) = 20.0 * logf(x) / logf(10)

ところで、人間の聴覚はヴェーバー・フェヒナーの法則から、
対数尺度で表すのが一般的です。
そのため、対数(デシベル)を使った調節ができないと、
ユーザーインタフェース的にはよくないと思います。



GrapeColor(DION)

リンク

2012/9/26(Wed) 22:42:59|NO.49594

mciを使えば指定した位置から再生しなおすことができますよ。
中間テストの勉強中でちょっとサンプル書けませんが。。。
もし良ければどなたかお願いします。



MNIGHT

リンク

2012/9/27(Thu) 06:51:31|NO.49600

なたでさん
返信ありがとうございます。わざわざ参考になるコードも書いていただいてとても助かります。
デシベルは絶対音量を表す単位のことかと思ってました・・・。全然見当違いでした。
解説まで書いていただいてありがとうございます。

GrapeColorさん
返信ありがとうございます。
ですが、ovplayの方で進めることにしました。申し訳ありません。



ONION software Copyright 1997-2023(c) All rights reserved.