アプリ版:「スタンプのみでお礼する」機能のリリースについて

先日うちの音楽プレイヤーが壊れてしまい、、
パソコンでしかできないけどプログラムで作ろうと思い
音を再生する方法を調べたらこれが出てきました
if (PlaySound(TEXT("再生ファイル.wav"), NULL, SND_SYNC)) {
std::cout << "再生しました";}
しかし
TEXT(変数)のように入れれないし
wchar_t*に型を変えても音が出ません。
調べても出てこないです、、、どうか教えてください、、

質問者からの補足コメント

  • うーん・・・

    問題のプログラム:
    const char* k = pass.c_str();
    wchar_t* l;
    mbstowcs(l, k, sizeof(k));
    if (PlaySound(TEXT(l), NULL, SND_SYNC)) {
    cout << "再生しました";
    }
    //error:識別子Llが定義されていません

      補足日時:2020/09/12 17:35

A 回答 (3件)

まず、次の点を確認させてください。


○ TEXT("再生ファイル.wav") 等と直接書いたら音が鳴ったのですか?
→ これで音が鳴らないのなら、TEXT以前の問題です。
○「wchar_t*に型を変えても」とは具体的にどの処理のことを言っているのですか?


http://wisdom.sakura.ne.jp/system/winapi/win32/w …
http://ichitcltk.hustle.ne.jp/gudon2/index.php?p …
C++でWINAPIを使うなら、UNICODE版とマルチバイト版の違いを意識する必要があります。

プログラム中で
"再生ファイル.wav" と書いたらマルチバイトの文字列(const char *)に
L"再生ファイル.wav" と書いたらUNICODEの文字列(const wchar_t *)に
なります。
TEXTマクロは、プロジェクトの設定に合わせて、自動で Lの有無を切り替えるものです。
マクロで書き換えるものなので、文字列リテラル (""で囲った文字列)以外を指定しても意味はありません。
TEXT(l)は Ll に書き換えられるだけで、 変数 l の内容を自動で変換するものではありません。

PlaySound(TEXT("再生ファイル.wav"), NULL, SND_SYNC)
で TEXTが使われているのは、 TEXTマクロで自動で L"再生ファイル.wav"と"再生ファイル.wav"のうち適切な型で使うようにするためです。
変数で指定するのなら、最初から適切な型の変数を指定します。
ひとまず、
if (PlaySound(l, NULL, SND_SYNC)) {
これでエラーが一つ消えるはずです。


ですが、問題はそれだけではありません。



○なぜ自作しようとしたのか?
○なぜC++で作ろうとしているのか?
○なぜWINAPIをそのまま使うような手段を採用したのか?

「現在、C++を勉強中で、練習を兼ねて作ってみたい」
ということならば、このまま頑張ってください。
ただ、まだまだ覚えなければいけないことが沢山あります。
※ wchar_t* l;
※ mbstowcs(l, k, sizeof(k));
※ C++(あるいはC言語)に詳しい人なら、ここにも大きな問題があることにすぐ気付くはずです。


「とにかく再生したい」
のならば、別の手段が沢山あり、C++を選ぶ理由はありません。

既出ですが、音楽再生ソフトは無料有料で数多くあります。
窓の杜 とか Vector とかで調べれば沢山あります。
OS付属のメディアプレイヤーでも大抵の音声は再生できます。

プログラムを作るにしても、C++は非常に難しい言語であり、「C+;でなければならない特別な理由」が無いのなら、別の言語の方が楽です。
例えば、C# や VB.Net だと
https://dobon.net/vb/dotnet/programing/playwavfi …
で「文字列」の部分に気を使うことなく、同じことができます。
    • good
    • 2
この回答へのお礼

ありがとうございます!頑張ります!

お礼日時:2020/09/13 16:25

良くは知らんが、以下を見ると、


https://www.tokovalue.jp/function/PlaySound.htm
ダブルクリックして再生できる音楽ファイルは再生できると思います。
出来ないばあいは、再生できる方法を構築する必要がありそうです。
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2020/09/13 16:25

たぶん


音楽プレイヤーを作ろうと思った
ところで負けだと思う. 再生ソフトなんざいっくらでもあるのに, なんでそんな遠回りな方法を選んだのか....

ところで, その「音楽プレイヤー」にあるデータはどうするつもり?
    • good
    • 1
この回答へのお礼

その再生ソフトを作りたいからこの質問をしました、、、
それとそのデータは別に使う予定はないです

お礼日時:2020/09/12 18:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!