Play a sound (maybe WAV?) from Windows line command

78,620

Solution 1

Not in windows now, in order to test this possible solution, but try to: "start "

I think it will open the wav file with the associated program that your windows has for ".wav" files.

And note, this is a wild-guess - someone with windows may give you a better solution if this doesn't do the job

Solution 2

You can do this natively with PowerShell. PowerShell is included with Windows Vista and later, and can be downloaded from Microsoft for older versions.


Wave files

PowerShell can be used to load the System.Media.SoundPlayer .NET class, which can be used to play a wave file.

(New-Object Media.SoundPlayer "C:\WINDOWS\Media\notify.wav").Play();

If you want, you can run this from the normal command line:

powershell -c (New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();

(note that PlaySync is used in the second example since the standard asynchronous play would be interrupted by the PowerShell process closing when launched like this)

And if you wanted to play only the first, say, 5 seconds of the sound:

powershell -c (New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").Play(); Start-Sleep -s 5; Exit;

Beep

A beep can be easily accomplished in the normal command line with echo ^G (where ^G represents BEL, ASCII character 7, inserted with Ctrl + G), as described in other answers. In the interest of completeness, here's the PowerShell method:

echo ^G

Yes, it's the same as the cmd one. echo in PowerShell is an alias (i.e. means the same thing) to Write-Host, which displays something to the screen (or triggers the Windows notification sound in the case of BEL).

An alternative method in PowerShell is to use the escape sequence for BEL, rather than inserting a literal BEL character with Ctrl + G:

echo `a

` is PowerShell's escape character, which modifies the meaning of the character after it. An escaped a indicates BEL. The advantage of this approach is it is easier and more visible when typed into a script.

To run this in a batch file (again, Vista or later):

powershell -c echo `a

source

Solution 3

echo ^G

Where ^G is CTRL + G or Alt + 7 on the keypad.

Solution 4

Install VLC. Use the following command. It starts up REALLY fast. This is what I used on Windows 7 b/c wmplayer takes so long to load, and the /close option was removed from wmplayer.

vlc.exe --play-and-exit audio.wav

Solution 5

Workaround (some sort of):

1) run audio file

2) wait till track ends (in my case its 5 seconds) and close media player

start wmplayer "C:\Windows\Media\Alarm10.wav" && timeout 5 && taskkill /im wmplayer.exe
Share:
78,620

Related videos on Youtube

Thiago Belem
Author by

Thiago Belem

I have proficiency in creating applications using Ruby on Rails & ReactJS. Using Agile methodologies (XP & Kanban), and keeping my code 100% covered via TDD and BDD.

Updated on September 17, 2022

Comments

  • Thiago Belem
    Thiago Belem almost 2 years

    How can i play a sound (CPU Beep or wav, don't matter what) using the Windows cmd?

    • Andreas Rejbrand
      Andreas Rejbrand almost 14 years
      Using start file.wav is a bad idea. It might take a second to start a bloated media player, just for a single beep. In addition, file associations might be wrong, the media player might not play the file, or it might play it over and over again, etc. The way of creating a simple "beep" is to write beep ^G. "^G" is not the circumflex accent followed by a capital letter G, but rather a special character that you insert by pressing Ctrl+G. It is actually the BEL character with ASCII value 0x07.
  • Admin
    Admin over 14 years
    Well, it'll certainly open the file in whatever application is associated with the type, but that's it. It's up to that application to decide what it does with it - it might play it, it might add it to a queue, or something else. Even if it does play the file, it's entirely likely that it won't terminate after playing, meaning this is probably a bad idea.
  • Dodd10x
    Dodd10x almost 10 years
    Is it possible to also have this command kill and currently playing wav files before executing the new wav file?
  • tvdo
    tvdo almost 10 years
    @Dodd10x Not easily for global audio, no. Could you provide more context? Do you intend to kill or pause? Is the other player another instance of this script, or a media player, or a browser, a game, etc.? If it's another instance of the same script, then it's much simpler (though still not entirely trivial).
  • Dodd10x
    Dodd10x almost 10 years
    It's another instance of the same script. I'm thinking I could add a line to kill powershell.exe in the task list first
  • tvdo
    tvdo almost 10 years
    @Dodd10x There are two ways I would suggest. One is to get the process ID of the PowerShell instance and save it to a file, then kill that ID at the start of a new instance (and clear the file). This is safer than killing all PS processes. The other way would be to use a semaphore (flag/signal) in PowerShell - you'd signal the semaphore, use Play() (async), wait for a semaphore, and close. Semaphores are a cleaner way of doing this, but a bit more complicated. I'd be happy to go into further detail in chat.
  • DavidPostill
    DavidPostill over 7 years
    Welcome to Super User! Please read How do I recommend software for some tips as to how you should go about recommending software. You should provide at least a link, some additional information about the software itself, and how it can be used to solve the problem in the question.
  • honzajde
    honzajde over 7 years
    Unfortunately this is running on foreground
  • Mark Ribau
    Mark Ribau over 7 years
    Yea, this was intended to replace the wmplayer method since it was slow to load and they removed support for the /close argument. The PowerShell method is probably the best bet.
  • Antonio
    Antonio about 7 years
    This is so much not the best answer!
  • zipizap
    zipizap over 6 years
    @Antonio, that was in 2010 :)
  • MLM
    MLM over 5 years
    For those looking for a headless VLC solution, vlc -I dummy --dummy-quiet t.mp3 vlc://quit from forum.videolan.org/viewtopic.php?t=79516#p262603
  • Henrik
    Henrik over 4 years
    Amazingly, this is marked as the accepted, "best answer"! 😁
  • dr_
    dr_ almost 4 years
    This answer should be deleted. It isn't even worthy to stay as a comment.
  • dr_
    dr_ almost 4 years
    This is the best answer. Bountied +50 reps.
  • Anic17
    Anic17 over 3 years
    How can this be the "best" answer?
  • Thomas H. Schmidt
    Thomas H. Schmidt over 3 years
    Please note that you have to use a backtick ` to escape spaces in file names, e.g. powershell -c (New-Object Media.SoundPlayer "c:\Windows\Media\Windows` Notify` Calendar.wav").PlaySync();
  • Jovylle Bermudez
    Jovylle Bermudez about 3 years
    This is true Magic, why G?
  • jkmartindale
    jkmartindale about 3 years
    @JovylleBermudez In ASCII (and later Unicode) the bell character is given control code 7, which is ^G because caret notation assigns control codes 1-26 the letters A-Z
  • Jovylle Bermudez
    Jovylle Bermudez about 3 years
    @jkmartindale Thank you.