Skip to content

Instantly share code, notes, and snippets.

@kujirahand
kujirahand / index.js
Last active December 22, 2023 11:21
ChatGPT APIを使ったアイデア発想ツール
const express = require('express');
const OpenAI = require('openai')
// APIキーを設定する(以下は書き換えが必要です★★★) --- (*1)
const API_KEY = 'xxx'
// APIキーを設定したオブジェクトを生成
const openai = new OpenAI({
apiKey: (API_KEY === 'xxx') ? process.env['OPENAI_API_KEY'] : API_KEY
});
// ChatGPT APIを呼び出す --- (*2)
async function callChatgpt(msg) {
@kujirahand
kujirahand / markdown__src__main.rs
Last active December 18, 2023 00:40
Markdown parser
// メイン関数 --- (*1)
fn main() {
// コマンドライン引数が足りない場合は使い方を表示 --- (*2)
if std::env::args().len() < 2 {
println!("[Usage] markown [input.md]");
return;
}
// コマンドライン引数からファイル名を取得する --- (*3)
let filename = std::env::args().nth(1).unwrap();
// ファイルを読み込む --- (*4)
@kujirahand
kujirahand / maze___main.rs
Created November 30, 2023 07:23
Rustで作ったターミナル迷路ゲーム
extern crate rand;
use rand::seq::SliceRandom;
use rand::thread_rng;
use std::io::{stdout, Result};
use crossterm::{
cursor, execute, ExecutableCommand, terminal,
style::{Color, Print, ResetColor, SetBackgroundColor, SetForegroundColor},
event::{read, Event, KeyCode},
};
#[derive(Clone, Copy, PartialEq, Eq)]
@kujirahand
kujirahand / images-to-pdf.py
Created November 10, 2023 05:02
images-to-pdf.py
from PIL import Image
from PIL.ExifTags import TAGS
from reportlab.lib.pagesizes import A4, landscape, portrait
from reportlab.pdfgen import canvas
import tempfile, os
# フォルダ内のJPEGファイルを列挙 --- (*1)
image_folder = 'pdf-in'
output_pdf = 'images.pdf'
image_files = [
@kujirahand
kujirahand / convert_mp4.py
Created August 8, 2023 12:05
画像にロゴを重ねるプログラム
import imageio, glob, os
from PIL import Image
import numpy as np
# ロゴファイルや入出力フォルダを指定 --- (*1)
LOGO_FILE = './logo.png' # ロゴ
INPUT_DIR = './in_dir' # 入力フォルダ
OUTPUT_DIR = './out_dir' # 出力フォルダ
# 背景透過したロゴを読み込む --- (*2)
logo = Image.open(LOGO_FILE)
logo = logo.convert("RGBA") # RGBAモードに変換
@kujirahand
kujirahand / 商品コード.tsv
Created August 6, 2023 08:54
サンプルのデータ「商品コード.tsv」
商品コード 商品名 数量
DA-3567 --- 1
PP-0987 --- 1
JJ-9876 --- 1
UU-9876 --- 3
NI-46-478D --- 1
@kujirahand
kujirahand / fireworks.html
Created July 5, 2023 13:08
Canvas APIを使って花火を打ち上げる
<!DOCTYPE html><html><head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<body style="background-color: black;">
<!-- 花火を描画するキャンバス-->
<canvas id="fireworks" width="400" height="400"
style="border: 1px solid silver;"></canvas>
</body>
<script>
// HTMLの<canvas>要素を取得
const canvas = document.getElementById('fireworks');
@kujirahand
kujirahand / soundfont_midi_player_tinyaudio_main.rs
Created July 14, 2023 12:52
サウンドフォント対応のMIDIプレイヤー。オーディオデバイスに直接音声データを書き込みます。
// $ cargo add rustysynth@1.2.0
// $ cargo add tinyaudio@0.1.1
use rustysynth::{SynthesizerSettings, Synthesizer, SoundFont, MidiFile, MidiFileSequencer};
use tinyaudio::prelude::*;
// 定数の指定 --- (*1)
const FILE_SOUNDFONT: &str = "TimGM6mb.sf2"; // サウンドフォントのパス
const FILE_MIDI: &str = "sakura2.mid"; // 入力MIDIファイルのパス
const SAMPLE_RATE: usize = 44_100; // サンプリング周波数(CD音質)
fn main() {
@kujirahand
kujirahand / soundfont_midi_player_to_wav_main.rs
Created July 14, 2023 10:43
SoundFontを使ったMIDIプレイヤー
//
// cargo add rustysynth
// cargo add wav_io
use rustysynth::{SynthesizerSettings, Synthesizer, SoundFont, MidiFile, MidiFileSequencer};
use wav_io;
// 定数の指定 --- (*1)
const FILE_SOUNDFONT: &str = "TimGM6mb.sf2"; // サウンドフォントのパス
const FILE_MIDI: &str = "sakura2.mid"; // 入力MIDIファイルのパス
const FILE_WAV: &str = "sakura2.wav"; // 出力WAVファイルのパス
@kujirahand
kujirahand / soundfont_write_wav_main.rs
Created July 14, 2023 07:00
SoundFontを使ってWAVファイル作成
use std::fs::File;
use std::sync::Arc;
use rustysynth::{SynthesizerSettings, Synthesizer, SoundFont};
use wav_io;
fn main() {
// サンプリング周波数(CD音質)を指定 --- (*1)
const SAMPLE_RATE: u32 = 44_100;
const SAMPLE_LEN: usize = (SAMPLE_RATE * 2) as usize; // 2秒分のデータ
// データの書き込み先を準備 --- (*2)
let mut samples:Vec<f32> = vec![];