189489J
@189489J (フルカワ ソラ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

大学で音に関するプログラムを組んでいて音が出ない

解決したいこと

ここに解決したい内容を記載してください。

やさしい音と音楽のプログラミング 横山真男 著 を使って大学の授業を進めていますが、
音がパソコンから出力されず困っています。問題の場所はsample1-1.cppで、使用PCはwindows9
visualStudio2022を使用しています。
追記しますとsample1-2.cppでは問題なくMIDIファイルを出力、MIDIファイルを再生して音声を出すことができたのでスピーカーなどの問題ではなさそうです。

visual studioのresource内に各種サンプルプログラムを置き最低限のファイル移動にとどめています。
バージョンは
Microsoft Visual Studio Community 2022 (64 ビット) - Current
Version 17.5.3
で実行しています
サンプルプログラム側が2019年のバージョンで止まっていたので
visualStudioの指示に従ってアップデートをしました。

発生している問題・エラー

出ているエラーメッセージを入力

例)

ビルド画面
ビルドを開始しました...
========== ビルド: 成功 0、失敗 0、最新の状態 1、スキップ 0 ==========
========== ビルド は 1:58 PM に開始され、00.371 秒 かかりました ==========

'sample1-1.exe' (Win32): 'C:\Users\user\source\repos\VS2019対応\sample1-1\Debug\sample1-1.exe' が読み込まれました。シンボルが読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\ntdll.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\kernel32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\KernelBase.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\winmm.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msvcrt.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\vcruntime140d.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\ucrtbased.dll' が読み込まれました。
スレッド 0x3a34 はコード 0 (0x0) で終了しました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\winmmbase.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\sechost.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\rpcrt4.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\MMDevAPI.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msvcp_win.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\ucrtbase.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\SHCore.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\devobj.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\combase.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\cfgmgr32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\wdmaud.drv' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\kernel.appcore.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\ksuser.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\avrt.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\AudioSes.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\oleaut32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\advapi32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\powrprof.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\umpdc.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msacm32.drv' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msacm32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\midimap.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\bcryptprimitives.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\clbcatq.dll' が読み込まれました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(1) tid(2428) 887C0030 スレッド 0x2428 はコード 0 (0x0) で終了しました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\imaadp32.acm' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msadp32.acm' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msg711.acm' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\msgsm32.acm' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\l3codeca.acm' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\user32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\win32u.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\gdi32.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\gdi32full.dll' が読み込まれました。
'sample1-1.exe' (Win32): 'C:\WINDOWS\SysWOW64\imm32.dll' が読み込まれました。
onecore\com\combase\objact\objact.cxx(827)\combase.dll!759E0249: (caller: 759DEC4B) ReturnHr(1) tid(3130) 800401F0 CoInitialize は呼び出されていません。
onecore\com\combase\objact\objact.cxx(827)\combase.dll!759E0249: (caller: 759DEC4B) ReturnHr(2) tid(3130) 800401F0 CoInitialize は呼び出されていません。
onecore\com\combase\objact\objact.cxx(827)\combase.dll!759E0249: (caller: 759DEC4B) ReturnHr(3) tid(3130) 800401F0 CoInitialize は呼び出されていません。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(2) tid(24e8) 887C0030 スレッド 0x24e8 はコード 0 (0x0) で終了しました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(3) tid(b10) 887C0030 スレッド 0xb10 はコード 0 (0x0) で終了しました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(4) tid(3550) 887C0030 スレッド 0x3550 はコード 0 (0x0) で終了しました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(5) tid(1f08) 887C0030 スレッド 0x1f08 はコード 0 (0x0) で終了しました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(6) tid(1d50) 887C0030 スレッド 0x1d50 はコード 0 (0x0) で終了しました。
avcore\audiocore\client\audioclient\audioclientcore.cpp(1501)\AUDIOSES.DLL!5EC69988: (caller: 5EC68771) ReturnHr(7) tid(144c) 887C0030 スレッド 0x144c はコード 0 (0x0) で終了しました。
スレッド 0x3668 はコード 0 (0x0) で終了しました。
スレッド 0x30e4 はコード 0 (0x0) で終了しました。
スレッド 0x3b58 はコード 0 (0x0) で終了しました。
プログラム '[15804] sample1-1.exe' はコード 0 (0x0) で終了しました。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

C++

#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>
#include <math.h>
#pragma comment( lib, "winmm.lib" )

#define SRATE 	44100		// サンプリングレート 44.1kHz
#define PI	3.14159286		// π


int main()
{
	// wave関係変数
	static HWAVEOUT hWave;
	static WAVEHDR whdr;
	WAVEFORMATEX wfe;
	static char* bWave;
	unsigned int count = 0;
	float b_time = 1.0;					// 鳴らす時間(秒)の設定
	float f0 = 880.0;					// ラ(A4)440Hz
	float amplitude = 100.0;				// 振幅
	int data_len = (int)SRATE * b_time; // データの長さ
	bWave = (char*)malloc(data_len);	// 波形データのメモリ確保	

	// 1秒分のデータを配列に設定する
	for (count = 0; count < data_len; count++) {
		bWave[count] = (char)(amplitude * sin(2 * PI * f0 * count / SRATE));
	}

	wfe.wFormatTag = WAVE_FORMAT_PCM;
	wfe.nChannels = 1;
	wfe.nSamplesPerSec = SRATE;
	wfe.nAvgBytesPerSec = SRATE;
	wfe.wBitsPerSample = 8;
	wfe.nBlockAlign = wfe.nChannels * wfe.wBitsPerSample / 8;

	// デバイスのオープン
	waveOutOpen(&hWave, WAVE_MAPPER, &wfe, 0, 0, CALLBACK_NULL);

	whdr.lpData = bWave;
	whdr.dwBufferLength = data_len;
	whdr.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
	whdr.dwLoops = 1;

	// ヘッダーの準備
	waveOutPrepareHeader(hWave, &whdr, sizeof(WAVEHDR));
	// 波形データの書き出し(再生)
	waveOutWrite(hWave, &whdr, sizeof(WAVEHDR));

	printf("press any key !");
	getchar();	// キー入力待ち

	return 0;

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

通知音について初期状態に戻した。スピーカーの音量を最大にしてシステム音を最大にした。

0

1Answer

気になるところとしては、

(1) WinAPIの戻り値をチェックしましょう。
どこかで失敗している可能性もあります。
MSのドキュメントで、APIの仕様を確認しましょう。

(2) 変数の値が想定通りか確認しましょう。
ブレークポイントを設定し、デバッグ実行で変数の値を直接見るのが手っ取り早いと思います。bWaveの中身とか問題ないですか?

1Like

Your answer might help someone💌