/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
程序员只应该考虑一件事情,就是脑子,就是要实现最重要的事情,最终对应到各种各样的抽象模型——时序、高阶流程控制、状态机、文件树、列表处理、数学计算、图形控件、2D画布,不是说七国语言精通各种运行环境和奇技淫巧,如果有,就让少数人解决、多数人享受解决方案。伺候什么构建系统啊?构建系统和依赖关系就该由工具解决,可工具偏偏还足够有『扩展性』弄得描述个软件包依赖都那么麻烦,什么 node_modules 啊、automake.m4configure.ac 啊。
/tmp/duangsuse.sock
这个等式就应该重构,为什么我们不先算每个 channel 的 byte length,再求总共的积?那样不是更符合正常思路吗?
说白了就是 (rate * size) * channel 还是 rate * (size * channel) 的区别。
之前没那么弄是因为它有一个特别蹩脚的生成循环,我不得不尝试抽提出 SoundBuffer。
我还以为可以有很多 QApplication 实例呢,原来这都是静态方法啊,还好 clang-tidy 指出了这一点。

真的搞不懂如此混淆,只为写短点是有什么好处,那么多本来是 unsigned type 的东西非得用 int,还不统一,真是让人费解,Rust 是解决了这一点。
还是 clang 开发者懂得如何编程,至少比那一群只会算法的工程师代码风格强。
就命名而言,我还是觉得 byte short int long 这样的命名方式好一些的,唯一的例外是 Rust 那样 i8 u32 的命名方式,CLR 和 Qt 这种 uint8 真的会让非英语母语的人很困扰的。
C++ 不能随便 extension 真心累,Kotlin 里用惯了的。
我讨厌把非关键的东西写长,一个字符也不行,所以我用 C++ 的 using(typedef) 给 Qt 的 core primitives 都起了 Rust 式别名
这些写 sample 的程序员脑子很聪明,就是差点编程习惯……
像这个,的确不应该是手动解决,之前 drakeet 那个也算是发现问题,可是解决方案太难受了。
利用 shuf 弄混这些项目:
#include <QTimer>
#include <QIODevice>
#include <QScopedPointer>
#include <QByteArray>
#include <QLabel>
#include <QSlider>
#include <QAudioOutput>
#include <QMainWindow>
#include <QPushButton>
#include <QComboBox>
#include <QObject>

解析器不成熟,所以不能有空行。真是浪费时间
换了赛扬,编译器死慢死慢,几乎不能用。
it >= a && it < b,我我明白了,原来 1 不在 (0 until 1) 的区间里。
SortInclude.kt
1.9 KB
可笑的我终于修好了解析的问题。
可悲的我终于又记起来了 print() 后直接退出程序不会刷新 stdout buffer 的。
不对,是我的 histogram 程序写错了,我还以为我记得住,不对是成功理解了的,真是令人悲伤的故事。
你以为你是有一点天才,其实真的是什么都没有,只是小菜鸡。
天晴了雨停了你又觉得你行了,你能行吗?
可悲之人必有可恨之处。
[QTimer, QIODevice, QScopedPointer, QByteArray, QLabel, QSlider, QAudioOutput, QMainWindow, QPushButton, QComboBox, QObject]
QIODevice
QTimer
QAudioOutput

QObject
QScopedPointer
QByteArray

QMainWindow
QLabel
QComboBox
QPushButton
QSlider

修好 bug 后,本苏又觉得自己行了。
// audio: channel * sample
// sample: rate(sample pre sec) / size(bit size)

typealias Real = Double
typealias Sample = Double
abstract class SampleIterator: DoubleIterator {
final override fun hasNext() = true
final override fun nextDouble() = nextSample()
abstract fun nextSample(): Sample
}

typealias IndexedSampler = (Int) -> Sample
open class Wave(private val y: IndexedSampler): SampleIterator {
private var x = 0
override fun nextDouble() = y(x++)
}
open class RepeatWave(y: IndexedSampler, private val cycle: Real)
: Wave({ y(it) * cycle * ((i%cycle) /cycle) }) /*cycle realdiv (i%cycle)*/

object SinWave: RepeatWave({ sin(2*PI*it) })

现在正在写
不成功便成仁