最近我在CS 101课堂上看到了一个视频讲座,它启发我开始使用C语言中的WAV文件格式.我今天的项目一直是使用简单的数学正弦函数创建声音.尽管存在一些障碍,我的程序现在可以接受几个输入(波的频率,波的幅度,采样率等)并创建包含指定音高的wav文件.
但是,在我的计算机扬声器上播放这些音调时,会发出一种奇怪的,有节奏的砰砰声,这种声音随采样率而变化.在较高的采样率下,弹出声音的频率增加并变成恼人的呜呜声.
奇怪的是,弹出声音在具有相同文件的不同计算机上是一致的.
下面我将发布用于生成WAV文件的代码.任何可能导致这种现象的见解都将受到赞赏.这可能只是我某处的一个愚蠢的错误.:)
#include <stdio.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <string.h>
#include <math.h>
struct WAVHeader {
char ChunkID[4];
uint32_t ChunkSize;
char RIFFType[4];
};
struct FormatHeader {
char ChunkID[4];
uint32_t ChunkSize;
uint16_t CompressionCode;
uint16_t Channels;
uint32_t SampleRate;
uint32_t AvgBytesPerSec;
uint16_t BlockAlign;
uint16_t SigBitsPerSamp;
};
struct DataHeader {
char ChunkID[4];
uint32_t ChunkSize;
};
void main(int argc, char * argv[]) {
//Check for valid number of arguments or display help
if(argc < 8) {
printf("Usage:\n./Tone -l [length] -s [frequency] …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小实用程序脚本,它使用Windows上的Ruby的Net :: HTTP模块通过HTTPS处理一些RESTful API.我一直都会遇到这个错误:
C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
from C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:923:in `block in connect'
from C:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb:74:in `timeout'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:923:in `connect'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:852:in `start'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb:1375:in `request'
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,我错过了默认的CA Certs.我跑了他的"ssl医生"脚本,它给了我这个诊断:
C:\Users\Megaflux\Documents\GitHub\Github_Backup> ruby doctor.rb
C:/Ruby22-x64/bin/ruby (2.2.2-p95)
OpenSSL 1.0.1l 15 Jan 2015: C:/Users/Justin/Projects/knap-build/var/knapsack/software/x64-windows/openssl/1.0.1l/ssl
SSL_CERT_DIR=""
SSL_CERT_FILE=""
HEAD https://status.github.com:443
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
The server presented a certificate that could not be verified:
subject: …Run Code Online (Sandbox Code Playgroud) 我一直在玩C中使用数学波函数创建声音.我的项目的下一步是从MIDI键盘控制器获取用户输入,以便将波调制到不同的音高.
我的第一个想法是,这将是相对简单的,Linux,Linux,将允许我从我的设备读取原始数据流,就像我任何其他文件.
然而,研究压倒性地建议我为MIDI控制器编写设备驱动程序.一般的想法是,即使设备文件可能存在,当我的应用程序调用read()和write()等函数时,内核也不会知道要执行的系统调用.
尽管有这些警告,我做了一个实验.我插入了MIDI控制器并且使用了"/ dev/midi1"设备文件.出现了稳定的空字符流,当我按下MIDI控制器上的一个键时,出现了几个字节,对应于MIDI设备应输出的预期消息块.MIDI协议信息
所以我的问题是:
为什么cat'ed流表现如此?
这是否意味着我的系统上已经安装了即插即用设备驱动程序?
我是否仍然可以继续编写设备驱动程序,还是可以像文件一样阅读它?
感谢您提前在这些方面分享您的智慧.
感谢您提前花时间阅读我的帖子.我将是第一个承认这段代码有点令人费解的人.
本周末,我的项目一直在制作一个程序,它将格式化的字符串作为参数,并吐出该字符串的所有可能的排列.格式化的字符串看起来类似于printf格式的字符串.常量保存在字符串中,变量部分如下所示:%[number-of-chars] [permuation类型]其中
[type-of-permutation]对于整数可以是'd',对于大写字母字符可以是'u',对于小写字母可以是'l',对于所有字母字符可以是'a',对于字母数字可以是'n'.
有一个特殊情况"%w",它从单词列表中读取单词而不是递增每个单独的字符.
事情通常按照我希望的方式运作.但是,在使用gdb进行测试和调试时,我发现了两个我无法解释的错误.
错误#1:字符串partial最初填充了该类型的最小字符(例如,%5d将填充"00000")但是,在执行任意命令(fopen)之后,部分包含任意字符,通常较低值大于0x09.这发生在我在源中标记的第143行.
错误#2:当我运行这样的程序时:"./ Permute%w%2d -w words",其中"words"是Ubuntu单词列表,程序在到达第4,200行附近时抛出分段错误词汇表.这也令人困惑.因为数字4,200是如此随机,我只能假设程序耗尽堆栈内存或类似的东西.
我将此代码分解为几个头文件.我将首先发布主代码,然后是下面包含的头文件.
#include <stdio.h>
#include "../Libraries/permute.h"
#include <malloc.h>
#include <string.h>
void main (int argc, char * argv[]) {
//Allocate ten base pointers to be inserted into our master string.
struct base * part[10];
//Allocate a character string on the heap to be manipulated by our program.
char * master = malloc(100);
//Organize arguments
if(argc < 2) {
printf("Usage:\n./Permute [Format String] -p -w [word-list] -o [output-file]\n");
printf("Format string with the general …Run Code Online (Sandbox Code Playgroud)