2312d,原始写

2023-12-28 16:04
文章标签 原始 2312d

本文主要是介绍2312d,原始写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文
我正在重建一些从C++到D的代码:

import std.stdio;
import std.file;
import std.string;
import std.math;
struct WavHeader {char[4] riff;int flength;char[4] wave;char[4] fmt;int chunk_size;short format_tag;short num_chans;int sample_rate;int bytes_per_second;short bytes_per_sample;short bits_per_sample;char[4] data;int dlength;
}
void main() {WavHeader wahv;wahv.riff[] = "RIFF".dup;wahv.wave[] = "WAVE".dup;wahv.fmt[] = "fmt ".dup;wahv.data[] = "data".dup;wahv.chunk_size = 16;wahv.format_tag = 1;wahv.num_chans = 1;wahv.sample_rate = 8000;wahv.bits_per_sample = 16;wahv.bytes_per_sample = cast(short)((wahv.bits_per_sample / 8) * wahv.num_chans);wahv.bytes_per_second = wahv.sample_rate * wahv.bytes_per_sample;const int duration_seconds = 10;const int buffer_size = wahv.sample_rate * duration_seconds;wahv.dlength = buffer_size * wahv.bytes_per_sample;wahv.flength = wahv.dlength + 44;short[] buffer = new short[buffer_size];foreach (i; 0 .. buffer_size) {buffer[i] = cast(short)(cos((2.0 * PI * 256.0 * i) / wahv.sample_rate) * 1000);}//更正了文件处理auto file = File("test.wav", "r");file.rawWrite(wahv);//按原始字节写音频数据file.rawWrite(cast(ubyte[])buffer);file.close();
}

因为我对这些话题有些陌生,对Dlang更是如此,所以我不太了解.问题在创建.wav时,关于rawWrite,我不确定该怎么办?

因为WaveHeader没有指针,只有原始内存,假设它都在cpu小头中,且使用''align(1)'',你可切片栈内存块,并从中写入.

file.rawWrite((cast(ubyte*)&wahv)[0 .. WaveHeader.sizeof]);

但是,我建议按字段写.
更多工作,但允许你处理字节序问题并消除对齐问题.如果需要,还可更改字段大小.
原则与上述代码相同.

错误消息说的是,你试传递WavHeaderrawWrite,但rawWrite需要一个切片(T[],T为类型)参数.
解决的最简单方法是使用指针切片来创建wavh临时切片:

  file.rawWrite((&wahv)[0 .. 1]);

这篇关于2312d,原始写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546506

相关文章

Android 使用原始xml资源

原始XML资源一般保存在/res/xml/路径下。 XML文件中访问语法格式: @[<package_name>:]xml/file_name Java代码中访问语法格式: [<package_name>.]R.xml.<file_name> 在JAVA程序中获取实际的XML文档,可以通过Resources的如下两个方法来实现: XmlResourceParser getXml(int

PyTorch数据加载:自定义数据集【Dataset:处理每个原始样本】【DataLoader:每次生成batch_size个样本】【collate_fn:重新设置一个Batch中所有样本的加载格式】

一、自定义Dataset Dataset是一个包装类: 用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。可以通过继承Dataset来将数据集的源文件、规模和其他非必要的功能打包,从而供DataLoader使用。 1、“文本分类”任务下使用自定义Dataset class.txt:所有类别 finance

【算法每日一练及解题思路】找出模式匹配字符串的异位词在原始字符串中出现的索引下标

【算法每日一练及解题思路】找出模式匹配字符串的异位词在原始字符串中出现的索引下标 一、题目:找出模式匹配字符串的异位词在原始字符串中出现的索引下标 二、举例: 两个字符串原始字符串initStr=123sf3rtfb,模式匹配字符串regx=f3s,找到模式匹配字符串regx(regx的异位词为f3s,fs3,3fs,3sf,sf3,s3f)在原始字符串initStr的索引下标2(对应3fs

如何在知行之桥上通过业务单号查找原始报文?

在知行之桥中接收或发送的数据通常是EDI原始报文,知行之桥会对EDI原始报文进行格式转换,以方便用户后端系统的处理。因此,一般情况下,用户看到的都是转换后的数据结构,例如Json、XML或Excel等,无需直接查看原始EDI报文。但在以下特殊的业务场景下,用户需要查找到指定的原始报文: 1.对于接收方向的报文来说,例如订单,用户在查看转换后的数据结构后,对数据值存在疑问,需要向发送方求证,看是否

C++_CH11_原始指针

C++_CH11_原始指针 1.1 内存 内存,就像一个长条的街区,街区有相互挨着的房子。每个房子都有一个地址,每个房子里装有一个字节的数据。 1.2 指针 指针就是用来存储地址的。为了精确知道每个byte在哪个位置,我们就记下它对应的指针。指针变量的类型,就是该指针存储的地址的那个byte的数据对应的数据类型。另外指针变量本身也需要内存来存储。这个存储单元也有一个地址。 1.3 定义一

鸿蒙(API 12 Beta3版)【使用AVScreenCapture录屏取原始码流(C/C++)】视频播放与录制

屏幕录制主要为主屏幕录屏功能。 开发者可以调用录屏(AVScreenCapture)模块的C API接口,完成屏幕录制,采集设备内、麦克风等的音视频源数据。当开发直播、办公等应用时,可以调用录屏模块获取音视频原始码流,然后通过流的方式流转到其他模块处理,达成直播时共享桌面的场景。 录屏模块和窗口(Window)、图形(Graphic)等模块协同完成整个视频采集的流程。 当前在进行屏幕录制时默

[译]Effective Kotlin系列之考虑使用原始类型的数组优化性能(五)

翻译说明: 原标题: Effective Kotlin: Consider Arrays with primitives for performance critical processing 原文地址: https://blog.kotlin-academy.com/effective-kotlin-use-sequence-for-bigger-collections-with-more-

【GIS系列】多源异构原始影像解析:策略模式与规则引擎的应用

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑  创作不易未经允许严禁转载。 1. 前言 在遥感技术和地球观测领域,处理多源异构原始影像数据是一个关键挑战。随着卫星和传感器技术的进步,我们获得了前所未有的数据多样性。本文将介绍一个为这些数据量身定制的解析系统,该系统结合了策略模式

2024考古之还在用原始JDBC开发 手搓 案例 实现一个模块的增删改

JDBC案例 将来如果完成的话 就代表对JDBC里面的知识点全部融会贯通了 其实就是对数据的增删改查 我们入门做不出来前端的内容 很正常 准备环境 建表 use mybatis;create table tbl_brand(id int primary key auto_increment,brand_name varchar(20),company_name varch

复杂值vs原始值内存空间

写在前面      最近在读《JavaScript启示录》,这本书不是JavaScript的详尽的参考指南,但是把对象作为了解JavaScript的透镜,受益匪浅。      那么我们先来聊一下JavaScript的原始值(值类型)以及复杂值(引用类型),以及他们在内存空间中的存储,关于他们你可能不清楚的一些事:      我们先通过一个经典的面试题类型(并不是原题,我即兴发挥)引出我们今天