有没有办法制作只能播放一次的音频文件?

Posted

技术标签:

【中文标题】有没有办法制作只能播放一次的音频文件?【英文标题】:Is there a way to make an audio file that can only be played once? 【发布时间】:2016-02-19 21:46:29 【问题描述】:

我正在寻找一种方法来制作只能播放一次的音频文件。使用 DRM 执行此操作会很好,但是如果有指南可以制作包含音频文件的 EXE 文件,并且在打开播放时会删除它本身,这也可以。我对编程知之甚少,所以如果这样的事情只能用 EXE 文件完成,那么我需要一个指南。

我知道如何使用 BAT 文件执行此操作,但这需要至少两个文件(BAT 文件和音频文件),并且为了我的使用,我需要它是一个文件。

有没有办法我可以这样做或制作这样的文件?我一直在寻找一种方法来做到这一点大约两个小时,但一无所获。

【问题讨论】:

看看autoIt 和资源UDF:autoitscript.com/forum/topic/51103-resources-udf 【参考方案1】:

这里有一个控制台 JScript.NET 示例可以帮助您入门。不过,它只会播放 base64 编码的 wav 数据。如果你想播放 mp3,那就有点麻烦了。

import System;              // for Convert
import System.Media;        // for PlaySync()
import System.IO;           // for MemoryStream
import System.Diagnostics;  // for Process()

var base64EncodedWav:String = "paste your base64-encoded WAV file here",
    audiobytes:byte[] = Convert.FromBase64String(base64EncodedWav),
    stream:MemoryStream = new MemoryStream(audiobytes),
    player:SoundPlayer = new SoundPlayer(stream);

// Play, blocking until finished
player.PlaySync();

// delete self
var self:String = System.Reflection.Assembly.GetExecutingAssembly().Location,
    task:Process = new Process();

print("This message will self-destruct.");

task.StartInfo.FileName = "cmd.exe";
task.StartInfo.Arguments = "/c timeout /t 1 & del /q " + self;
task.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
task.StartInfo.CreateNoWindow = true;
task.Start();

【讨论】:

以上是关于有没有办法制作只能播放一次的音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

电脑无法播放声音,提示没有音频设备,这该怎么办?

有没有办法在音频 B 也开始播放后修复音频 A 的播放?

flutter:: 有没有办法使用 audioplayer 包只播放一个音频文件?

如何停止在我的 C 游戏中播放音频?

有没有办法给某人打电话并在android中播放音频文件?

如何制作自定义音频格式和自定义播放器