Code dùng hàm PlaySound khi chạy không nghe được nhạc

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

int main()
{
	std::cout << "Sound playing... enjoy....!!!";
	PlaySound(TEXT("a_sd.wav"), NULL, SND_FILENAME | SND_LOOP);
	return 0;
}

mình có chạy cái chương trình này nhưng khi chạy thì nó không phát ra âm thanh gì hết. Mong mọi người giúp e với ạ @@

  1. Tập tin âm thanh đã đúng đường dẫn chưa? Thường thì sẽ nằm cùng 1 thư mục với tập tin thực thi.
  2. Cờ SND_LOOP phải đi chung với cờ SND_ASYNC.
    https://docs.microsoft.com/en-us/previous-versions/dd743680(v=vs.85)

SND_LOOP The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. If this flag is set, you must also set the SND_ASYNC flag.

7 Likes

Mình có thử hết r cậu
mình thử dùng bên máy của bạn mình máy nó thì phát âm thanh còn mình ra mỗi tiếng beep (tắt mở unikey)

1 Like

Thử hết r là thử gì v bạn. :slightly_smiling_face:
Ý là bạn chạy thử đoạn code như này hả.

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

int main()
{
	std::cout << "Sound playing... enjoy....!!!";
	PlaySound(TEXT("a_sd.wav"), NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);
	return 0;
}

Nếu v thì không có tiếng gì đâu, chương trình cứ thế mà thoát th. :slightly_smiling_face:


Trc tiên thì mình hỏi bạn là khi bạn chạy đoạn code dưới có phát ra âm thanh như bình thường không.

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

int main()
{
	std::cout << "Sound playing... enjoy....!!!";
	PlaySound(TEXT("a_sd.wav"), NULL, SND_FILENAME);
	return 0;
}

Nếu không có tiếng gì thì bạn kiểm tra lại file.wav có đúng đường dẫn chưa, file này có đúng định dạng không, phát ra âm thanh có ổn không.


Nếu có âm thanh thì ok r.
Lý do đoạn code đầu tiên không có tiếng là do… nó chạy xong r. :kissing:

Không ít thì nhiều bạn hẳn phải biết cái flag SND_ASYNC tại sao nó tên như vậy nhỉ. :smiley:

async là bật đồng bộ chứ còn gì nữa.

Chính vì là bất đồng bộ nên nó mới không quan tâm hàm PlaySound khi nào thì xong mà cứ thế chạy tiếp câu lệnh tiếp theo (return 0) => thoát chg trình. :V :V

Muốn không thoát thì phải khiến cho chg trình tiếp tục hoạt động.

Đơn giản thì chỉ cần thêm while (true); trước return 0; là ngon chứ gì. :kissing:

Nhưng làm v nó cực ngốn CPU, vì chg trình phải loop liên tục mà không làm gì. :smiley:

Thay vì loop ta vẫn có thể bắt chg trình chờ mà không ngốn CPU đó là dùng input. =]]
Thay while (true); bằng std::cin.ignore(); là được. :smiley:


P/S: thiếu #include <iostream>. :kissing:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?