小编Sak*_*ain的帖子

为什么使用python和在线webapp将wav文件编码为base64会给出不同的结果?

我正在制作一个简单的网络应用程序,需要使用howler.js播放一些音频文件。howler.js 接受 base64 URI 作为输入,所以我想尝试一下。为了测试它,我获取了一个示例音频文件并使用在线音频到 base64 编码器来获取 base64 URI。我在base64字符串的前面添加了数据描述("data:audio/wav;base64,")并复制粘贴到以下JS函数中...:

function playSound() {
    var data = "";
    var sound = new Howl({
      src: [data],
      loop: false
    });
    sound.play();
}
Run Code Online (Sandbox Code Playgroud)

...它工作得很好。由于我将处理相当数量的音频文件,我想我会使用一个简短的 python 脚本将它们全部转换为 base64。为了测试,我使用以下 python 代码将相同的音频转换为 base64 字符串:

import base64
with open("0.wav", "rb") as f1,open("b64.txt", "w") as f2:
    encoded_f1 = base64.b64encode(f1.read())
    f2.write("data:audio/wav;base64,")
    f2.write(str(encoded_f1))
Run Code Online (Sandbox Code Playgroud)

我注意到 base64 字符串与我之前从网站获得的字符串不同。我将其粘贴到前面显示的 JS 函数中,但是当我尝试播放声音时,出现以下错误:

Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
Run Code Online (Sandbox Code Playgroud)

python 编码为 base64 …

javascript python audio howler.js

7
推荐指数
1
解决办法
4126
查看次数

在 Windows 上使用 MFC 或 ATL 标头与 MinGW 编译代码?

我正在尝试确定是否可以使用 MinGW 编译需要 Microsoft 基础类 (MFC) 或 Active Tempplace 库 (ATL)(Microsoft Visual C++ (MSVC) 附带的库)的代码。

一些背景信息:我的最终目标是能够gcov在 Windows 上为 C++ 工具生成报告。该代码包含许多代码路径,只有在 Windows 上构建时才能访问这些代码路径(即由 保护的部分#ifdef _WIN64)。这意味着我需要构建一个.exewith gcc. 我想这样做的原因是什么?我希望通过在 Windows 上运行测试来获得更完整的代码覆盖率结果,以便也可以测试这些代码路径的覆盖率。这无论如何可行吗?

这是我尝试过的。从小处开始,我一直试图MinGW在 Windows 上构建这个程序:

#include <iostream>
#include <atlstr.h>


int main() {
    CString aCString = CString(_T("A string"));
    _tprintf(_T("%s"), (LPCTSTR)aCString);
}
Run Code Online (Sandbox Code Playgroud)

这可以毫无麻烦地使用 MSVC 进行编译。现在,使用 MinGW:要构建,我只需调用gcc -fprofile-arcs -ftest-coverage test.cpp -o test. 但是,它失败并显示以下消息:

test.cpp:3:10: fatal error: atlstr.h: No such file or directory
 #include <atlstr.h>
          ^~~~~~~~~~
compilation …
Run Code Online (Sandbox Code Playgroud)

c++ mfc code-coverage mingw visual-c++

5
推荐指数
0
解决办法
2086
查看次数

使用 monad 进行简单的 Haskell 解析器

长话短说

我试图理解这是怎么回事:

satisfy :: (Char -> Bool) -> Parser Char
satisfy pred = PsrOf p
  where
    p (c:cs) | pred c = Just (cs, c)
    p _ = Nothing
Run Code Online (Sandbox Code Playgroud)

相当于这样:

satisfy :: (Char -> Bool) -> Parser Char
satisfy pred = do
    c <- anyChar
    if pred c then return c else empty
Run Code Online (Sandbox Code Playgroud)

语境

这是一些关于 Haskell 解析的讲义的片段,我试图理解:

import Control.Applicative
import Data.Char
import Data.Functor
import Data.List

newtype Parser a = PsrOf (String -> Maybe (String, a))
    -- Function from input string …
Run Code Online (Sandbox Code Playgroud)

monads parsing haskell

4
推荐指数
1
解决办法
1213
查看次数