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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0205
大富豪音量の取得・音質の調整36解決


大富豪

リンク

2022/2/5(Sat) 14:45:07|NO.95317

お世話になります。

表題の通り、
音量の取得・音質の調整は可能でしょうか。

指定したwavなどの音声ファイル、
または再生中の音量レベルを取得。

指定したレベルより、
大きい場合は音量を下げる、
小さい場合は音量を上げる、
などをしたいです。

メディアプレイヤーにイコライザーがついてますが、
HSP上で音質などを制御するのは難しいでしょうか。

win32?
https://docs.microsoft.com/ja-jp/search/?scope=Desktop&terms=%E9%9F%B3%E9%87%8F

とかを調べているのですが、初心者には難易度が高すぎて・・・。

宜しくお願いします。



この記事に返信する


zrs90(5さい)

リンク

2022/2/5(Sat) 15:40:51|NO.95318

外部dllを使っても良いなら
音量取得 又は、音質取得 
で、掲示板下のサイト内検索から
検索して見ると、出てきます。

中から、使えそうな物を
最近の動作例のある投稿を優先して
選ぶと良いと思います。



ねんねこ5787

リンク

2022/2/5(Sat) 15:52:16|NO.95319

inoviaさんが公開しているものを使う
https://hsp.moe/download/hspvol100.lzh
これを使えば、PCの主音量の調整などができます。
ovplayというライブラリを使う
http://nennneko5787.y.ribbon.to/download/ovplay.php
これを使えば、音声の音量を変えられます。
ただし、mp3には対応していないので注意です
※上のリンクは再配布です。問題があるようでしたら消します。
Luminoというライブラリを使う
http://nnmy.sakura.ne.jp/archive/lumino/0.2.0a1/LuminoHSP_0.2.0a1.zip
↑使いやすいバージョン
https://github.com/LuminoEngine/Lumino/releases/download/v0.10.0/Lumino-v0.10.0-HSP3.zip
↑最新版
音量だけではなく、ピッチも変えられます



ねんねこ5787

リンク

2022/2/5(Sat) 15:53:07|NO.95320

>>95319
,和進違いますね。ごめんなさい。



zrs90(5さい)

リンク

2022/2/5(Sat) 17:03:55|NO.95321

訂正させて下さい。

音質取得 では、なく 音声プラグイン
で検索して下さい。
(※イコライザーや、音質制御等で検索したが
使えそうな物が、見つからなかった為。)

中には、ねんねこ5787 さんが、回答されている
の、プラグインもありました。

後、llmod3 を使っている物は、出来れば
回避して下さい。
(※3.6以降では、動作非推奨/hsp3に同梱されていない)



大富豪

リンク

2022/2/5(Sat) 19:58:11|NO.95322

>zrs90(5さい)さん
>ねんねこ5787さん
 ご対応ありがとうございます。

すみません、
どれをどう使うのか分かりませんでした;


wav,MP3などの音声データですが、
データそれぞれが持っている音量って違う事がよくありますよね。

例えば
A.wav=vol80
B.wav=vol100

⇒PCのマスターボリューム100で聞こえる音量
(マスターボリュームは変えていない)
Bのほうが大きく聞こえるハズで、

B.wavの元データの音量を取得して、
dmmvolとかでマイナス20とかにすればAと同じような音量になるはずです。

PCがどういう仕組みで最終的な音量を決めているのか分かりませんが、
wavデータそのものに音量データのようなのがあるんだと思います。
それを取得して色々やりたい感じです。

PCのマスター音量を変えない限り、
マスターの段階で音量を取得すれば
同じ事なんでしょうけどね;



zrs90(5さい)

リンク

2022/2/5(Sat) 21:08:50|NO.95323

当方、スマホ投稿で、ダウンロード不可の為
ソフト説明文が、外部にないと読めません。

hsp3の音声dll 、モジュールの機能を
使用した事がなく、用語から検索
したのですが、ねんねこさんの
△、で、音量の取得は可能と思います。


残りの件ですが、恐らく、音声平滑化、均一化の処理
(※ラウドネス等化だったかな?)は、
osの設定から、解決した方法は過去板に
ありましたが...

hsp3での実装例についてはないようで...
私の検索方法が悪いのか
当サイト内では、見つかっていません。
ねんねこ5787さん紹介の
△に、ついていれば良いのですが...

こちらの処理については、フリーソフトを使って
頂いた方が、良いかと思います。
フリーソフトとなると、hspの話題から
外れてしまうので、ここではあまり書けません。z
上のワードを使って、検索してみて下さい。

申し訳ありません。
...もう少し探して見ようと思います。



GENKI

リンク

2022/2/5(Sat) 21:50:24|NO.95324

そもそも音声ファイルにボリュームという概念はありません。
WAVファイルでは、音の信号波形を決まった範囲(ここでは説明のため-1〜1とする)に調整されて保存されています。
一番大きな音が出る瞬間でも波形の大きさは 1 を超えることはありません。
音声を再生するときは、音声を再生するアプリとOSの両方が音の信号波形を何倍にしてスピーカーに電気信号として渡すかを決定しています。

参考資料:https://soundengine.jp/wordpress/tips/glossary/113/

ファイルによって音量が違って聞こえるのは、ファイルに記録する際に -1〜1 に収まるように調整した際のやり方の問題になります。
音の信号波形が絶対に範囲をはみ出さないように少し余裕を持たせてファイル化した場合、再生すると小さく聞こえます。
逆に音の波形がちょっとぐらいはみ出しても(歪んでも)いいやという調整で保存した場合、再生すると音が大きく聞こえます。
ここは調整する人の好みによるものでルールはありません。また何倍すれば元の音量になるのかも記録されていません。

> A.wav=vol80
> B.wav=vol100

つまりこれに相当する情報はファイルに記録されていませんし、調整もファイルを作成した人の好みで決定されています。扱いにくいから統一規格作ってほしいですよね!
ということで、自分の耳で聞いてファイルごとに再生ボリュームを決定するのが一番簡単です。
どうしても数値がほしいならRMSを計算する手もありますが、音量調節は記録されている音声内容も考慮が必要なのでお勧めしません。



補足
上記説明では -1〜1 と書いてますが、ファイルの仕様によります。
ビット数が、8bitの場合 0〜255、16bitの場合 -32768〜+32767 の範囲で記録されています。しかしこれは音量ではなく解像度の違いです。扱える数値が大きいほうがデータを細かく記録できるということ。
この数値は、そのまま音量になるのではなく記録可能な最大振幅が同じになるように換算してから使用されます。
 8bitの場合 (記録された値-127)/127
 16bitの場合 記録された値/32768
という感じです。



大富豪

リンク

2022/2/5(Sat) 22:21:04|NO.95325

●zrs90(5さい)さん
>ねんねこさんの
>△、で、音量の取得は可能と思います。
 はい、内容を見ましたが、どれをどう利用するのか・・・@@;
 すみません。

>osの設定から、解決した方法は過去板に
>ありましたが...
 OS側でも一応はできるんですね。
 方法のひとつとして知っておきます。
 ありがとうございます。

●GENKIさん
>ボリュームの概念
はい、そんな気がしました^^;
たぶんピークレベルが波形のどこかにある、とかそういうやつだと思います。
DTMソフトでもよくあるノーマライズを掛けて
ピークレベルが低ければギリギリまで自動でゲインを上げる、とか。
(ファイル全体のピークポイントを走査するような感じ)

リアルタイムで瞬間のdbとかが取得できれば
デジタル音量メーターみたいにしたり、
コンプレッサー的な事もできるんでしょうけど。

やはり難しいようですね;
ご返答ありがとうございます。
参考に致します。



zrs90(5さい)

リンク

2022/2/5(Sat) 23:44:02|NO.95326

GENKI さん 詳細な解説と指摘
ありがとうございました。
スレッド主さんより、私が勉強するべきですね。


大富豪 さん、色々手は尽くしましたが
私ではムリでした。申し訳ないです。

本来、この方法良くないのですが...
このソフトなら、ほぼ大丈夫と思います。
音声ファイルの対応、ラウドネス等化等の
処理を行えます。
...コレを利用して、何かHSP3で作って下さい。

●Audacity

https://www.gigafree.net/media/se/audacity.html



大富豪

リンク

2022/2/6(Sun) 11:50:42|NO.95333

>zrs90(5さい)
とんでもございません、
ご対応頂きありがとうございます。
OS側やソフトでの対応も検討してみます。

>GENKIさん
DTMソフトを使っている時、
通常のデシベル(dB)メーターとは他に
RMSメーターで表示できるようになっていました。
違いがよく分りませんが;
HSPでRMS値が取得できるようですが
dmmvolとの連携で制御できるんですかね;
お勧めしないとの事ですが
もし宜しければその方法を・・・



zrs90(5さい)

リンク

2022/2/6(Sun) 13:08:12|NO.95334

os設定で解決したと、書きましたが
音声トラブルの解決で、あまり参考にならないとは
思いますが、その過去板を貼っておきます。

http://hsp.tv/play/pforum.php?mode=all&num=93435



大富豪

リンク

2022/2/6(Sun) 13:20:56|NO.95336

>zrs90(5さい)さま
ノーマライズのような感じですね。
近い事はできるかもしれませんので、
参考にさせて頂きます。
ありがとうございます。



zrs90(5さい)

リンク

2022/2/6(Sun) 13:23:01|NO.95337

掲示板下のサイト内検索で、rms値 で計算方法?が
出てきたので...

http://hsp.tv/play/pforum.php?mode=pastwch&num=47066



大富豪

リンク

2022/2/6(Sun) 13:53:31|NO.95338

>zrs90(5さい)様
ありがとうございます。
参考にさせて頂きます。

RMS値がなんなのかまだよく分かってませんが、
wav再生中(またはファイルそのもの)のRMS値を取得して
if RMS>10 then volume -10
if RMS<10 then volume +10
とか、自動ボリューム調整的な、
のが出来ると・・・うれしいです。



zrs90(5さい)

リンク

2022/2/6(Sun) 19:43:37|NO.95340

私に『様』は、付けなくて良いです。
普通に『さん』で十分です。

私は前にも書いた通り、スマホ投稿のみで
おまけにPCも、Windows7 (※当然、ネット接続不可)
のみなんで...また、プログラムを作る能力もありません。

私がしているのは、当掲示板の検索機能
(記事検索とサイト内検索) を使って
近そうな事例を、調べてるだけ。

後は、外部検索。Google 、 Yahoo等の検索を使って
まずは、検索ワードそのものだけで、検索。
たくさん出ているなら、
分かりやすい物を拾って、軽く読んで
次は、hsp または hsp3 を
検索ワードにつけて、アンド検索。

...という方法を使ってます。
なので、検索ワードさえ分かれば
誰にでも出来ます。


...RMS については、掲示板内で検索しても
多分、それ以上、出てきません。
後は、このスレッドが引っかかるだけです。

こういった場合は、それを使った技術みたいな物を
検索します。(※逆の場合もあります。)
例えば、ボリューム調整 とか...

...で、運良く、過去板の回答、サンプル
モジュール、dll等が入手出来たら
マニュアル等を参考にいじって見ます。

どうしても分からない時、内容を具体的に
まとめてから、掲示板で質問します。
(※一度に、多数の質問や、連投は出来るだけ
避けるようして下さい。)

後、解決した後でも、自分が関わったスレッドは
別の解決方法が書いてあったりするので
時々、確認して見ると、勉強になります。

こんな所でしょうか?...長々と失礼しました。



大富豪

リンク

2022/2/6(Sun) 21:35:14|NO.95341

>zrs90(5さい)さん
各種了解しました、
ありがとうございます。



GENKI

リンク

2022/2/6(Sun) 23:40:40|NO.95342

RMSの計算は、zrs90(5さい)さんのリンク先にあります。
>> NO.47117

一応補足しておくと、

> 1. 音量を調べたい波形区間を切り取る
> 2. 区間内の各サンプルの音量の2乗した値を調べる
> 3. 2で調べた値の平均値を求める
> 4. 3で求めた平均値のルートを求める

ここまでがRMSを求める計算です。
御覧の通り平均値なので、単発の大きい音も平均されるので注意。
波形の切り出しってどうやるんだっけ…忘れてしまった。


> 5. 4で求めた値をxとして、20 * log10( x ) [dB]がRMSです。

これは計算したRMSの値の単位をデシベル(dB)に換算する操作です。
デシベル…対数だと実際の人間の感覚に近くなるので、通常この換算をして使います。
この換算をしないと音が小さいときと大きいときの差が激しすぎて人間の耳の感覚と乖離しちゃって扱いにくい。



zrs90(5さい)

リンク

2022/2/7(Mon) 01:26:29|NO.95344

GENKI さん
補足の説明、ありがとうございます。
いつも、お世話になってます。助かりました。



大富豪

リンク

2022/2/7(Mon) 12:31:33|NO.95345

>GENKIさん
ありがとうございます。
はい、計算方法は提示頂きましたが、
肝心なのはその取得方法でして・・・
やはりHSPでは難しいんでしょうね;
諦めて他の方法を模索しようかと思います。
ねんねこ5787さん含めみなさんありがとうございました。



窓月らら

リンク

2022/2/7(Mon) 16:44:35|NO.95346

HSPでもできるとうちは思います。
コードは提示できませんが、こういうのはHSPに限定せず、wavファイルの構造などの文献を探すのが先ですね。
読み物
https://www.youfit.co.jp/archives/1418

ヘッダから取得すればいいと思いましたが。



GENKI

リンク

2022/2/7(Mon) 19:45:03|NO.95347

音の波形を数値で取得は昔やってました。参考になるかどうかわかりませんがどうぞ。

wavファイルから波形を直接読むならこちら。
http://mclab.uunyan.com/dl/dl39.htm

再生しながらならこちら。
https://mclab.uunyan.com/lab/hspneta/neta006.htm



zrs90(5さい)

リンク

2022/2/7(Mon) 20:37:58|NO.95348

窓月らら さん
別スレッドでは失礼しました。
ありがとうございます。

...あら、GENKI さん先に投稿してましたね。
下のいらないかも。...ありがとうございます。

(※wave資料用)
waveのヘッダー部分を作る

http://www.hsp.tv/play/pforum.php?mode=pastwch&num=91918


...では、私は、mp3 の資料を、置いて行きます。
(※私の検索方法で出来ますが。時間があったので。)

●[HSP3] 自前でMP3の情報を解析する

http://blog.tkooler.net/Entry/87/


●check mp3 module v2

https://www.natade.net/lang/hsp/


-追記-
後、ちょうど別スレッドで、音楽関係の
YouTube配信を、やっておられる方が
宣伝をしてます。見てみると良いかも。



大富豪

リンク

2022/2/7(Mon) 21:29:47|NO.95349

>窓月らら さん
何がなんだか・・・@@;

>GENKIさん
>zrs90(5さい)さん
もはや私の手には追えない領域に・・・。

テーマが逸れますが、
サウンドデバイスのマスター音量がレベルメーターのように動いていますが、
現在ボリュームの数字と連動してるんでしょうけど、
レベルメーターの最大値のリアルタイム取得と
HSP上で音量制御ができれば・・・。

波形の取得ができるという事は
その時の波形の振幅が取得できるということですね;

とにかく、もはやプロの領域に・・・@@;



zrs90(5さい)

リンク

2022/2/7(Mon) 23:42:47|NO.95351

GENKIさん、窓月らら さんは
実際、ゲームやツール、Android等のアプリを
作られているので、この掲示板でもかなり
上位レベルの方々です。
(※hspのプログラムコンテストに作品が出ている
ので、暇な時に見てみると良いかな。)


難しいですよね。私もそう思います。
...なので、ほとんどの方は、アプリケーション
を使ったり、.dll や モジュール を使って
hsp3のアプリを作る訳ですが...

hsp3用の音楽系の.dll は、古い物が多く
(※物によっては10数年前とか
ダウンロードも簡単に出来ないとか
作者さんが放置しているものがほとんどです。)

普通は、.dll によって、読み込めるフォーマットや
当然、仕様もそれぞれ違うので、同梱の説明書、
掲示板等のサンプルや、前例等を調べつつ
動かしたり、いじって見ます。

後、別言語用(vc ++、c#等)のモジュールや.dll
の場合は、hsp3用に定義されたファイルから
命令を呼び出す感じで使うことになります。
こちらは、国産の物は、ほとんどなく
翻訳ソフトを使いながら説明を見ることが
よくあります。
(※日本語訳がある場合もあります。時々、誤訳あり。)

...私、ダウンロードとか、出来ないから
細かい事は分かんないけど
これで、説明合ってるのかな??

...と、hsp3.6 付属の.dll とかサンプル
(ゲームとかでも良いです。)は
実行したり、いじってみた事はありますか?
hdl (HSP docs Library)は命令 だけじゃなく
用語から検索するのも可能です。
例えば『音』で検索すると、使える命令とか
説明書(txtファイル) 等が、出てくるので
まずは、それを。

後、hspmucom の命令は 確か
30年程前の、PC-8801 という古いパソコンの
FM音源ドライバーのエミュ?なので、とりあえず
これは別として、考えてもらえばいいです。

-追記-

私、個人の意見ですが、少しずつ質問が
ブレて来てる気がします。
まずは、hsp3のサンプル、掲示板のサンプル等
(※検索方法は、教えましたね。)を調べて
実行、いじって見るのを、おすすめします。

その上で、もう少し作りたい物の具体的な仕様が
まとまってから、再度、スレッドを立ててみるのは
どうでしょうか?



usagi

リンク

2022/2/8(Tue) 07:03:08|NO.95352

解決しているみたいですが気になったので、

>HSP上で音質などを制御するのは難しいでしょうか。win32?とかを調べているのですが

HSPはWindowsのdllやcomを呼び出せますので、Windowsで出来ることはある程度出来るかと思います。
私、信号処理を趣味で長年やっているのですが、HSPというよりEQ,COMP,REVERBなどの信号処理を理解する方が敷居が高いかもですね。

GENKIさんが超便利なRIFFフォーマット(wav)読み込むモジュール紹介されてますので、
まず、Rawデータをそれで信号処理して波形描画などしてみて、
それが出来たら再生はHSPからwinmm.as読み込んでwaveOutOpen関数を調べてみてそのデータを再生がと良いと思います。

HSPに限った事ではなく、他の言語でもローレベルな事をしたいと思うと、コアな部分をプログラムしていく必要が出てきます。
もし、さっくり行いたいなら、誰かがフリーで配布している自分がやりたいことに近いライブラリdllを探すのも手かと思います。
(なかなか自分に都合の良いライブラリが無いので結局作るはめになるのですが、それが楽しかったりもするので。)

ですから、HSPでは難しいというより、オーディオの信号処理が専門的なので学習コストが高いかもです。


>サウンドデバイスのマスター音量がレベルメーターのように動いていますが
>レベルメーターの最大値のリアルタイム取得とHSP上で音量制御ができれば・・・。
サウンドデバイスはWindowのAPIを使っているわけですから、HSPで出来なくはないと思います。
win32が理解できないと少し難しいかもしれませんが、一例としてCOM機能でcoreaudioを使うとできます。

実行して、デバイスのマスターミキサーのメーターと音量触ってみてくださいませ。HSPの画面が連動します。
また、コメント外すと、ピークをみてできる限り0.5(-6dBfs)の出力になるようマスターの音量が動きます。

※個人的にはマスターを動的に触るのは、もし音声ツールを作られたいなら個人環境により(アンプ等)
 事故があるのであまりお勧めしないです。
 ゲームであればオーサリングの段階で音量を揃えたら良いと思います。
 また、機械的に音量をそろえることは周波数帯によって聴感が変わりますし音は時間の芸術ですからなかなか難しいです。
 

#module ; sprocketさんのモジュール #defcfunc tofloat double p1 temp = p1 return lpeek(temp) >> 29 & 7 | (p1 < 0) << 31 |lpeek(temp, 4) - (p1 ! 0) * 0x38000000 << 3 #defcfunc todouble int p1 temp = 0.0 lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000) lpoke temp, 0, p1 << 29 return temp #global ;参考:https://docs.microsoft.com/en-us/windows/win32/api/_coreaudio/ #define CLSID_IMMDeviceEnumerator "{BCDE0395-E52F-467C-8E3D-C4579291692E}" #define IID_IMMDeviceEnumerator "{A95664D2-9614-4F35-A746-DE8DB63617E6}" #define IID_IMMDevice "{D666063F-1587-4E43-81F1-B948E807363F}" #define IID_IAudioEndpointVolume "{5CDF2C82-841E-4546-9722-0CF74078229A}" #define IID_IAudioMeterInformation "{C02216F6-8C67-4B5B-9D00-D008E73E0064}" #usecom IMMDeviceEnumerator IID_IMMDeviceEnumerator CLSID_IMMDeviceEnumerator #comfunc IMMDeviceEnumerator_GetDefaultAudioEndpoint 4 int,int,var #usecom IMMDevice IID_IMMDevice CLSID_IMMDeviceEnumerator #comfunc IMMDevice_Activate 3 var,int,int,var #usecom IAudioEndpointVolume IID_IAudioEndpointVolume CLSID_IMMDeviceEnumerator #comfunc IAudioEndpointVolume_SetMasterVolumeLevel 6 int,int #comfunc IAudioEndpointVolume_SetMasterVolumeLevelScalar 7 int,int #comfunc IAudioEndpointVolume_GetMasterVolumeLevel 8 var #comfunc IAudioEndpointVolume_GetMasterVolumeLevelScalar 9 var #usecom IAudioMeterInformation IID_IAudioMeterInformation CLSID_IMMDeviceEnumerator #comfunc IAudioMeterInformation_GetPeakValue 3 var newcom devEnum, IMMDeviceEnumerator IMMDeviceEnumerator_GetDefaultAudioEndpoint devEnum, 0, 0, p newcom dev, IMMDevice, -1, p iid = 0xC02216F6, 0x4B5B8C67, 0x08D0009D, 0x64003EE7 IMMDevice_Activate dev, iid, 1, 0, p newcom ami,IAudioMeterInformation,-1,p newcom aev, IAudioEndpointVolume, -1, p ;threshold = 0.5 : attackTime = 0.05 : autogain = 0.0 *MAIN IAudioMeterInformation_GetPeakValue ami, res : peak = todouble(res) IAudioEndpointVolume_GetMasterVolumeLevelScalar aev, res : vol = todouble(res) IAudioEndpointVolume_GetMasterVolumeLevel aev, res : voldb = todouble(res) ;autogain = limitf( autogain+((threshold-peak*vol)*attackTime), 0.0, 1.0) ;IAudioEndpointVolume_SetMasterVolumeLevelScalar aev, tofloat(autogain), 0 rgbcolor $C0C0C0 : boxf 0, ginfo_winy - double(ginfo_winy)*peak, 32, ginfo_winy rgbcolor $00FF00 : boxf 0, ginfo_winy - double(ginfo_winy)*peak*vol, 32, ginfo_winy rgbcolor $0000FF : p = ginfo_winy - vol*ginfo_winy: line 0, p, 32, p color : pos 0,0 : mes strf("peak:%f(%f) vol:%f(%fdB)",peak, peak*vol, vol, voldb) redraw 1 : await 16 : redraw 0 : rgbcolor $FFFFFF : boxf goto *MAIN



大富豪

リンク

2022/2/8(Tue) 19:37:36|NO.95356

>zrs90(5さい)さん
HSPのサンプルはほぼいじりません;
必要な事が発生した時に
必要なコマンドを調べるような感じですね。
外部dllが必要になったらそのサンプルを編集して使う程度でございます。

>usagiさん
ありがとうございます。
プロの領域を超えてもはや天界のレベルでございます。
ソースの動かし方から勉強する必要があります;
まさに”音は時間の芸術”ですね。
専門性が高いので習得時間のリスクも大きい可能性もありますが、
ほどほどに勉強します。


皆さんありがとうございました。



zrs90(5さい)

リンク

2022/2/8(Tue) 21:36:12|NO.95357

usagi さん
先日のスレッドでは、お世話になりました。
ありがとうございます。

まさか、Windows COM まで、出てくるスレッドになるとは...
見た事ない命令、パラメータの羅列...凄すぎ。
GENKI さんの2つのサンプルも、また同様ですが。
参考先のMSDocs も見事に英語...。

私も、ダウンロードして、動作を見てみたい。

スレッド主さんが、満足しているようなので...
皆様、ありがとうございました。



大富豪

リンク

2022/2/20(Sun) 20:27:48|NO.95501

hgimg3 / サウンドデータの状態取得
dmmstat p1,p2,p3
(モード値 1 : ボリューム値)

モード1のボリューム値が、
何を再生してもゼロになります。
wav,ogg,それぞれの形式で色々なファイルを再生しましたがゼロです。

ogg_sndtest.hsp
サンプルソースのモード数値16を1に変えても結果はゼロ(0)です。

dmmload後にdmmvolで音量を変えても
dmmstat *,*,1(vol)に反映されません。

どんな状況なんでしょうか・・・^^;
数値は何を意味するのか・・・。



zrs90(5さい)

リンク

2022/2/20(Sun) 22:03:17|NO.95503

dmmvol 命令の説明を読むと
デシベル(dB)単位になってます。
後は、説明参照。

その後に、別のサンプルが記載されていて
volsamp.hsp と言うのがあります。
一度、コレでテストして見て下さい。



大富豪

リンク

2022/2/20(Sun) 22:28:12|NO.95504

>zrs90(5さい) さん
ありがとうございます、
デシベル値了解です。

※指定したボリューム値に変えたいのではなく、
音声データの音量数値を取得したいのです;

モード値 16 はサンプルのままですが取得できます。
モード値 $100 は ogg形式のみ取得できます。
(たぶん0.25秒区切り)

モード値 1 (vol)はどんなファイルを再生してもゼロ(0)でした。

モード値 2 (PAN)も同じくゼロ(0)です。
 左右の一定時間のデシベル平均差を取らないとは思いますが。

モード値 3,4,5,は意味が分からないのでテストしていません。


今後実装する予定なので現状は動作しないモード(?)
という事なんですかね。

>dmmstat
設定フラグ値
1 ボリューム値
2 パンニング値
3 再生レート(0=オリジナル)
4,5 ループポイント(下位、上位16bit)
16 再生中フラグ(0=停止中/1=再生中)
$100 oggサウンドの再生位置(実数値)
$101 oggサウンドの全体サイズ(実数値)



ZAP

リンク

2022/2/20(Sun) 23:44:30|NO.95505

dmmstatのボリューム値、パン値、ループポイント値は
それぞれdmmvol命令、dmmpan命令、dmmloop命令で「自分自身が設定した」値が返ってくるようですね。
(なので設定しない限りはデフォルト値が返ってくる)

「3 再生レート」だけはどこで設定するのかよくわかりませんでした。

そもそもファイルが持っている「音量値」なるものが存在するかどうかはわかりませんが、
dmmstatで一発で取得できるものではないようですね。


#include "hspogg.as" dmmini vol=-999 ;音量(-10000〜0) pan=1576 ;パンニング値(-10000〜10000) dmmvol 0,vol dmmstat a,0,1 mes "設定したボリューム:"+a dmmpan 0,pan dmmstat a,0,2 mes "設定したパン:"+a



zrs90(5さい)

リンク

2022/2/21(Mon) 01:13:13|NO.95506

ZAPさん ありがとうございます。
助かりました。

運がよかったです。過去板で
ハンドルネームから、この質問関係の回答を
された方のようなので...

hsp3 の更新履歴を読む限り、
3.5から、ほぼ更新されていない。
(※ hgimg3については、3.5β5(※音声部分は3.32rc1)
hspoggについては、3.21)から更新がないようです。

ちなみに、hspogg は、hgimg3 のサウンド機能命令だけ
抜き出した物と考えてもらえば。詳しくは各.txt参照。

(※実は私、つい最近この件で、恥をさらしました。
doclib フォルダの中の 各.txt にしか記述がなく
...ちゃんと回答をしている方に、突っ込みを...)

...なので、hspogg.txt に記述がなくても、hgimg3.txt か
プログラミングマニュアル側になんらかの説明があるかも。
(※上で、書いた通り、hdl 側に記述がないが
こちらには、記述がある場合がある。)



大富豪

リンク

2022/2/21(Mon) 02:58:19|NO.95508

>ZAPさん
色々ありがとうございます;
自分で設定した数値を返す、という意味なんですね・・;

dmmvolの指定範囲が(-10000〜0)なのですが、
試してみるとマイナス数値はdmmstatに反映しないみたいですね;
(ゼロのまま変わりませんでした)
デシベル換算(?)なのでプラス値しかなく、
マイナスの場合はゼロになるのかな・・・

dmmvolの数値を送って相対的に音量を下げるという事なんでしょうけど、
ファイル音量の絶対値が何なのかいまだによく分かりません。

>zrs90(5さい) さん
ありがとうございます。
その後色々調べて見るとdmmstatが出てきました。

マイナスしか指定出来ないdmmvolとデシベル換算(?)のプラス数値で、
矛盾していると思うのですが、
しばらく更新が無いとのことなので放置されてるんですかね^^;


大変お騒がせしました、
ありがとうございました。



ZAP

リンク

2022/2/23(Wed) 08:29:53|NO.95551

>大富豪さん

解決済みなので蛇足かもしれませんが、
dmmvolの値はマイナスでもdmmstatで取得できますよ。

NO.95506の書き込みで示したサンプルスクリプトの
変数volの値で確認してみてください。



大富豪

リンク

2022/2/23(Wed) 21:59:51|NO.95569

>ZAP
ありがとうございます。
テストのやり方が悪かったのかマイナス値を取得できませんでした;

どちらにせよ、
自分で設定した数値を取得するのは
今回の目的と逸れるので^^;

hspoggについては、
3.21以降更新されてないようですので、
正常に動作していない可能性もあるかもしれませんね。

ogg_sndtest.hsp
このサンプルのモード16(再生フラグ)は取得できますが、
モード1(音量)では反応しません。

記述を16から1に変えただけなので、
何か他にやり方があるのかもしれませんが・・・。



大富豪

リンク

2022/2/24(Thu) 10:56:49|NO.95572

>>ZAPさん
うっかり敬称をつけ忘れました、
大変失礼致しました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.95317への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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