質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3114閲覧

読み込んだファイルの更新を検知して音を出す

退会済みユーザー

退会済みユーザー

総合スコア0

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/09/01 14:17

編集2016/09/01 14:29

###前提・実現したいこと
twitter streaming api より流れてくるjsonのデータを自分のパソコンの中にjsonファイルとして保存しています。指定したキーワードを含むツイートがされるとそのツイート情報が々jsonファイルに次々に上書きされるという状況です。
その不定期に更新されるjsonファイルをopenframeworksのupdate()にて常に読み込み続けており、jsonファイル内のデータを実行画面に表示させています。ですのでjsonファイルの更新があるたびopenframeworksの実行画面の文章も変化していきます。
ここまでは完成しています。
これからやりたいこととして、jsonファイルが更新され、openframeworks上の実行画面の文章が変化するたびに音を出したい(mysound.play()を実行したい)と思っているのですが、どのようにjsonファイルの更新を検知?すればよいのでしょうか?

C++

1#include "ofApp.h" 2 3 4void ofApp::setup() 5{ 6 ofSetFrameRate(30); 7 std::string file = "twitter.json"; 8 font.loadFont("meiryo.ttc", 15); 9 10 // Now parse the JSON 11 bool parsingSuccessful = result.open(file); 12 13 if (parsingSuccessful) 14 { 15 ofLogNotice("ofApp::setup") << result.getRawString(); 16 17 // now write pretty print 18 if (!result.save("example_output_pretty.json", true)) 19 { 20 ofLogNotice("ofApp::setup") << "example_output_pretty.json written unsuccessfully."; 21 } 22 else 23 { 24 ofLogNotice("ofApp::setup") << "example_output_pretty.json written successfully."; 25 } 26 27 // now write without pretty print 28 if (!result.save("example_output_fast.json", false)) 29 { 30 ofLogNotice("ofApp::setup") << "example_output_pretty.json written unsuccessfully."; 31 } 32 else 33 { 34 ofLogNotice("ofApp::setup") << "example_output_pretty.json written successfully."; 35 } 36 37 } 38 else 39 { 40 ofLogError("ofApp::setup") << "Failed to parse JSON" << endl; 41 } 42 43 mysound.loadSound("decision2.mp3"); 44 mysound.setVolume(10); 45} 46 47void ofApp::update() 48{ 49 std::string file = "twitter.json"; 50 result.open(file); 51} 52 53 54void ofApp::draw() 55{ 56 ofBackground(240); 57 58 //---- 59 ofSetHexColor(212121); 60 std::stringstream ss; 61 font.drawString("@", 5, 20); 62 font.drawString(result["user"]["screen_name"].asString(), 26, 20); 63 font.drawString(result["text"].asString(), 5, 40); 64 ofDrawBitmapString(ss.str(), 10, 14); 65 //---- 66 67 mysound.play(); //ここの実行を何とかしたい 68 69} 70

C++

1#pragma once 2 3 4#include "ofMain.h" 5#include "ofxJSON.h" 6 7 8class ofApp: public ofBaseApp 9{ 10public: 11 void setup(); 12 void draw(); 13 void update(); 14 15 ofxJSONElement result; 16 ofTrueTypeFont font; 17 ofSoundPlayer mysound; 18 19}; 20

###試したこと

C++

1if(result != result){ 2 mysound.Play(); 3}

みたいなことをしてみたり、GetFileTime関数を使用してファイルの更新日時が変化していたら音を出そうみたいなことをやってみたのですがうまくいきませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
C++
openframeworks 0.9.3
使用アドオン ofxjson

windows10 VisualStudio2015

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JSONであるresultに毎回変わる更新日付のような値はあるでしょうか(できれば「数」として)?たとえばupdated_atというのが更新されると変わると言うのであれば、次のようにできると思います。

C++

1// 予め double prev_updated_at = 0; というグローバル変数かメンバー変数を作っておきます。 2double updated_at = result["updated_at"].asDouble(); 3if(updated_at != prev_updated_at){ 4 mysound.Play(); 5 prev_updated_at = updated_at; 6}

これで、前回から変更されたときだけ変わると思います。そのようなものがJSONにない場合は、GetFileTimeの最終更新日時に対して同じように処理すればできると思います。

投稿2016/09/01 21:56

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/02 02:20

更新日付ではありませんでしたが、"id"という毎回変化する数字だけで構成されるものがあったので、それを入れてみたところ無事動きました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問