sample_meter.hsp

sample\audiometer\sample_meter.hsp » Plain Format

;============================================================
; hspaudiometer サンプル: リアルタイム音圧 + 8 バンド スペクトラム
;
; Windows の再生音 (システム全体) を WASAPI ループバックで取得し、
; 1 秒間のピーク / RMS / dBFS と 8 バンド周波数分布を表示。
;============================================================

#include "hsp3cl_net_64.as"
#include "hspaudiometer.as"

	sm_open
	if stat < 0 {
		dialog "hspaudiometer open failed (stat=" + stat + ")"
		end 1
	}

	dim sr, 1
	sm_get_sample_rate sr
	mes "WASAPI loopback ready (sample rate = " + sr(0) + " Hz)"
	mes "音楽や動画を再生しながらこのプログラムを動かしてください..."
	mes "Ctrl+C で終了"
	mes ""

	sdim band_names, 16, 8
	band_names(0) = "SubLo" : band_names(1) = "Low"   : band_names(2) = "MidLo"
	band_names(3) = "Mid"   : band_names(4) = "MidHi" : band_names(5) = "High"
	band_names(6) = "Super" : band_names(7) = "Ultra"

	repeat 60                ; 60 x 200ms = 12 sec 計測
		await 200
		sm_poll
		ddim rms, 1 : ddim peak, 1 : ddim dbfs, 1
		sm_get_rms  rms
		sm_get_peak peak
		sm_get_dbfs dbfs

		sdim bar, 128
		bar = ""
		n = int(peak(0) * 40)
		if n > 40 : n = 40
		repeat n : bar += "=" : loop
		mes strf("  %4.1fdB peak=%.3f %s", dbfs(0), peak(0), bar)

		; バンドメーター (改行して並べる)
		sdim bline, 256
		bline = "   "
		repeat 8
			ddim b, 1
			sm_get_band cnt, b
			bn = int(b(0) * 1500)
			if bn > 10 : bn = 10
			sdim bb, 16
			bb = ""
			repeat bn : bb += "|" : loop
			bline += strf(" %s=%-10s", band_names(cnt), bb)
		loop
		mes bline
	loop

	sm_close
	end 0