質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

Q&A

3回答

3533閲覧

win10でアプリを開かずに音源を再生したい

phpsyoshinsya

総合スコア156

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

0グッド

2クリップ

投稿2020/01/20 09:36

編集2020/01/20 21:31

###こういうことで方向性は合っているのでしょうか

var sound=new Audio(); sound.src="alarm01.wav"; sound.load(); sound.play();

これをwscriptから呼び出して開いたとたんに、
「Windows Script host!Audioは定義されていません。コード800A1391 source:Microsoft JScript実行時エラー。」
だそうです。
###JScriptは更新されてないから
だから、Audioオブジェクトなんてないよって言ってるんですか?
そもそも、WScriptでやることじゃないんですか?
###下の方向性に
○一応向かっている?
○そもそもJSわかってないんじゃない?
○それだと既定のブラウザ動いちゃうよ?
どこにチェックを入れられることになるんでしょうか?
引き続きお願いします。
###Windowsが色んな場面でアプリを表示することなく音を鳴らしてますよね?
今回やりたいのはまさにこれです。
作成したスクリプトに鳴らしたい音源のパスを渡して、ショートカットにショートカットキーを割り当てて、実行すれば音源とスクリプトをどこかに置いておけば、どこからでも鳴らせますよね?
###VBScriptやJavaScriptとMP3ファイルとかと合わせて検索すると
JavaScript
では、Audioオブジェクトとか、VBScriptではWMPlayer.OCXとか「これいけそうかな?」みたいなのは出てくるんですけど、サンプルプログラム動かしてもエラーは出ないけどなんにも鳴らないとか、オブジェクト作れませんとか、こんなに進まないのスクリプト書いてる中ではじめてなんじゃないぐらいにうまくいきません。
###できるなら
実行しているスクリプトも画面に表示されないのが最も都合がいいんですが…?
情報少なすぎで申し訳ありませんが、どうぞ皆様のお知恵を授けてください。

win10 1909 Home AMD64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

JScriptは更新されてないから

だから、Audioオブジェクトなんてないよって言ってるんですか?

より正確には、Audioはブラウザが提供する機能のため、ブラウザとは無関係な Windows Script Host 上の JScript では使用できません。

HTMLAudioElement - Web API | MDN

Windows Script Host 上の JScript を使用する場合は、Windows Medi Player を内部的に使うのが一つの手です。

JScript mp3の再生について 書き残し - Powerpoint VBAを使おう!

上記のサイトをベースにざっくり書いてみたのが以下のコードになります。

JScript

1// win10でアプリを開かずに音源を再生したい 2// https://teratail.com/questions/236335 3 4// 再生したいファイルへのこのファイルからの相対パス(\のエスケープし忘れに注意)。 5var audioFileName = "AudioFile.mp3"; 6 7// フルパスの生成。 8var fso = new ActiveXObject("Scripting.FileSystemObject"); 9var audioFullName = fso.BuildPath( 10 fso.GetParentFolderName(WSH.ScriptFullName), 11 audioFileName 12); 13 14// デバッグ用。再生したいファイルのフルパスかどうか。 15WSH.Echo(audioFullName); 16 17// Windows Media Player の準備。 18var player = new ActiveXObject("MediaPlayer.MediaPlayer"); 19// ロード直後に即再生しない。 20player.AutoStart = false; // Returns or sets whether or not file playback is automatically started 21 22// 対象ファイルを開いて再生。 23player.Open(audioFullName); // Opens the given filename asynchronously 24player.Play(); // Begins playing from the current position or marker 25 26// ロード・再生開始待ち(適当)。本来は PlayState で判断すべき。 27WSH.Sleep(1000); // 1000 ミリ秒待機。 28 29// 再生が終わるまで待つ。 30// MediaPlayer.MPPlayStateConstants.mpPlaying 31var mpPlaying = 2; // Stream is playing 32while (player.PlayState === mpPlaying) { 33 WSH.Sleep(100); 34}

上記のコードを、Shift_JISまたはUTF-16LE(Unicode)のエンコードのテキストとしてファイルに保存し、拡張子は.jsとします。
あとは、audioFileName変数の値を変更すれば動作するはずです。

投稿2020/01/20 22:24

編集2020/01/20 22:31
imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpsyoshinsya

2020/01/20 22:38

コードまで丁寧にありがとうございます。 コード中の player.Open(audioFullName); // Opens the given filename asynchronously の行ですが、プレイヤー画面も開いてほしくないんですが、そういうことを指しているわけではないのですか? それから、スクリプトにファイルのパスを引数として渡すことが条件なのですが、エンマークをエスケープを忘れずにとありましたが、 d:\test\ みたいに書けばいいよってことなんでしょうか?
imihito

2020/01/20 22:59

> player.Open コメントにある通り再生したいファイルを開くものであり、プレイヤーとは無関係です。 > エンマークをエスケープを忘れず `WSH.Arguments`からコマンドライン引数を受け取るのであれば不要です。 回答のコードでは、JScriptのコード内にパス記載することが前提のため、エスケープが必要と記載しました。
phpsyoshinsya

2020/01/20 23:25

早速の回答ありがとうございます。 相対パスを書くことで、再生ができることは確認できました。 改めてありがとうございます。 ファイルの中でも絶対パスを書きたい場合や、wscript.Argumentsから受け取る場合も、 var audioFullName = fso.BuildPath( fso.GetParentFolderName(WSH.ScriptFullName), audioFileName ); の行はコメントアウトしておけばいいのと、 player.openに渡す変数を間違えないように直すことですね?
phpsyoshinsya

2020/01/20 23:27

あと、Audioオブジェクトをなんとか頑張って、組み込めたとしても、クロスOSは実現できることはないんですか?
imihito

2020/01/21 13:06

絶対パスを使う場合や`WSH.Arguments`を使う場合の対処は、書かれている通りでOKです (`player`も相対パスで問題なく認識できているようです)。 > クロスOSは実現できることはないんですか? 私自身あまり詳しくありませんが、JavaScriptのファイルは単体ではただのテキストのため、それを解釈して実行するもの(以降、「実行環境」と記載します)が必要です。 Windowsで`.js`ファイルをダブルクリックすると起動するのは、「Windows Script Host」という実行環境がWindowsに同梱されているからですが、名前のとおりWindows専用です。 クロスプラットフォームを考えるのであれば、「Windows Script Host」以外の実行環境を対象にスクリプトを作成する必要があるでしょう。 実行環境の例:各種ブラウザ・Node.js あるいはクロスプラットフォームに強い言語(よく聞くのはGo言語)を使う、というのも手だと思われます。
guest

0

どの言語にしろ、音声ファイルを再生する関数があります。
たとえば、「javascript mp3再生」でぐぐるといろいろでてきます。

投稿2020/01/20 09:45

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpsyoshinsya

2020/01/20 11:22

まず、検索の仕方から間違ってましたね。ありがとうございます。こういう方向で解決できるのかなぁと思う方法をコードブロックに追加させていただきましたので、ご一読いただけると有難いです。
phpsyoshinsya

2020/01/20 21:37

まだ道半ば、いやスタートラインにも立ててない?この先どんな方向でやるのがいいんでしょうか?
guest

0

スマホからなので簡単に。

https://stackoverflow.com/questions/22367004/vbs-play-sound-with-no-dialogue

当方ウインドウズ環境無いのでwin10で動くか分かりませんのでご自身でお試しください。

質問本文を修正するのは良いのですが、新しいことを上に追加されると状況知らない人が読むとわけ分からなくなるので、追記したことがわかる文言を付けて下方に書いたほうがいいと思います。

投稿2020/01/21 03:14

oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問