2017-01-20

BaseXClient-Tcl

Source code:
BaseXClient-Tcl


Tcl client for BaseX database.

BaseX 是一個 XML 資料庫,我只是用來做某些簡單的測試。大部份的功能跟官方的 client 都有點像,不過還是有做一些簡化假設,但是整體上功能應該是差不多的(應該啦)。

2017-01-10

print tcl_platform info

使用 parray 列出來 tcl_platform 的資料:

parray tcl_platform

tcl_platform is an associative array whose elements contain information about the platform on which the application is running, such as the name of the operating system, its current release number, and the machine's instruction set.

2017-01-05

tkvlc: A demo to embed libVLC to Tk toolkit widget

Source code:
tkvlc


使用 OpenGL with C and Tcl/Tk 的方法,將 libVLC 內嵌在 Tk frame widget 內播放影片的方法。

我只有在 openSUSE 上測試。用來驗證這個方法的可行性。


更新:
有些說明沒有寫好,我重新推一個上去 Github。

更新:
會在 Windows build fail,更新 source code。

2017/01/09 更新:
使用 libvlc_media_get_duration 讀取影片的長度。如果在 libvlc_media_player_set_media 之後沒有播放前就讀取,讀到的長度會是 0。

解決的方法有二個,一個是 play 以後 stop,再讀取就會是正確值(就是要先做一小段播放的動作)。一個是 set_media 之後呼叫 libvlc_media_parse,在分析以後 meta info 就會被填寫為正確值,那之後取得的資料就會是正確的。

2017/01/09 更新:
增加更多的 command,並且更新 command 的組織方式。
將版本更新為 v0.3。

2017-01-04

OpenGL with C and Tcl/Tk

OpenGL with C and Tcl/Tk


很有趣的是,這篇文章其實指出了一個很有用的用法,就是拿到 HWND/XWindow ID 以後,我們就可以內嵌一些內容到一個 Tk 的 frame 內。

關鍵是 It involves making a frame widget in Tcl, and then passing its HWND to C to initialize the OpenGL rendering context.


而我猜不只是 OpenGL,具有類似方法的函式庫也可以這樣使用。

因為沒有真的實作過,所以還不確定這個技巧的可用性有多高,但是我直覺認為,這個方法可以結合不少外部函式庫來使用。

2016-12-28

Tcl bindings for OpenAL (open audio library): tclopenal

Source code:
tclopenal


用途:
只是簡單的包裝 OpenAL 的 API,然後配合 tclmpg123 或者是 tclsndfile 來播放音樂檔案。因為 OpenAL 選項很多,所以我做了一些簡化假設(所以這是一個簡化的版本)。

然後 capture 的部份我遇到很麻煩的問題,因為 Windows 7 (64bit), Ubuntu 14.04 (VM) 無法找到可以使用的 capture device,openSUSE 可以找到但是開啟失敗。所以目前只有 playback 功能的部份。


更新:
Windows 7 要插入麥克風才會出現 device。

更新:
我大概知道為什麼會開啟 capture device 失敗了。

更新:
推送上去開啟 capture device OK 的 code。
但是只有執行測試沒問題,沒有實際錄音。

2016/12/29 更新:
目前的實作使用 1 source 1 buffer,如果播放比較大的音樂檔案會遇到問題才對。
目前不知道怎麼解決,所以我先 tag 一個 v0.1 的版本,然後研究以後再看能不能改善。

更新:
嘗試加入超過 1 個 buffer 的支援。

2016/12/30 更新:
加入更多關於使用超過 1 個 buffer 的支援。
tag 一個 v0.2 的版本。

2016-12-21

Tcl bindings for PulseAudio simple API: tpulsesimple v0.1

Source code


tpulsesimple


About

PulseAudio is a network-capable sound server program distributed by freedesktop.org.

The simple API is designed for applications with very basic sound playback or capture needs. It can only support a single stream per connection and has no handling of complex features like events, channel mappings and volume control.

This extension is Tcl bindings for PulseAudio simple API.


說明


用來測試 PulseAudio simple API。write 的部份使用播放 mp3 檔案的方式來測試,read 的部份只有做執行測試(沒有實際 record)。

2016-12-15

rl_json extension

rl_json - Extends Tcl with a json value type and a command to manipulate json values directly. Similar in spirit to how the dict command manipulates dictionary values, and comparable in speed


之前在 Tcler's wiki 發現的套件,他展示了一個我現在還不會的 Tcl extension 技巧,就是將 JSON 視為 value type (defines a new Tcl_Obj type to store the parsed JSON document)。

因為這個想法實在是太厲害了,我記錄一下這個套件。

tclmonetdb v0.9.4

Homepage


tclmonetdb

About


MonetDB is an open source column-oriented database management system developed at the Centrum Wiskunde & Informatica (CWI) in the Netherlands.

MonetDB excessively uses main memory for processing, but does not require that all data fit in the available physical memory. To handle a dataset that exceeds the available physical memory, MonetDB does not (only) rely on the available swap space, but (also) uses memory-mapped files to exploit disk storage beyond the swap space as virtual memory.

tclmonetdb is a Tcl extension by using MAPI library to connect MonetDB.

一些說明

  1. Update MAPI header
  2. Upgrade TEA version to 3.10

這是一個小更新的版本。

更新:
上傳到網站的 Windows 檔案錯誤,我重新上傳了新的。

2016-12-14

Tcltaglib v0.9

網站:

Tcltaglib


ChangeLog:
  • Upgrade TEA to 3.10

在試著使用 MSYS2/MinGW-W64 來編譯的時候,我發現會編譯失敗,不過升級 TEA 版本到 3.10 以後就可以解決。

所以我把 TEA 升版到 3.10。然後將 README.md 的說明寫的更清楚一些,所以重新出發,github 上的被我刪除重建了。然後將文件的更新也放到 Tcltaglib 的網頁上。

更新:
嗯…… 有東西沒更新到,所以我又重建了一次(囧),然後重新上傳檔案。

更新 x2:
狀態不太好,還是有東西沒更新到,重新更新一次。

2016-12-13

Tclmpg123

Source code:
tclmpg123


因為 MP3 的專利的關係,所以 libsndfile 的作者沒有寫關於 mp3 格式的部份(因為他開了一家公司來處理 libsndfile 的維護,所以如果 MPEG 組織找上門來索取專利費的話會帶來問題),如果要讀取 mp3,就要使用其它的 library。

所以 tclmpg123 就是用來透過 libmpg123 處理讀取 mp3 檔案的工作,然後再把讀出來的音訊訊號丟給 tcllibao 輸出。